74 votes

Formulaire en ligne imbriqué dans un formulaire horizontal dans Bootstrap 3

Je veux construire un formulaire dans Bootstrap 3 comme ceci :

Mon site (pas le lien ci-dessus) vient d'être mis à jour à partir de Bootstrap 2.3.2 et le format n'est plus correct.

Je ne peux pas trouver de doc sur ce type de formulaire sur getbootstrap.com .

Quelqu'un peut-il me dire comment faire ? Seul 'Username' serait acceptable.

Merci.

PS Il existe un question similaire mais il utilise Bootstrap 2.3.2.

149voto

edsioufi Points 3696

J'ai créé un Démonstration pour vous.

Voici comment votre structure imbriquée devrait être dans Bootstrap 3 :

<div class="form-group">
    <label for="birthday" class="col-xs-2 control-label">Birthday</label>
    <div class="col-xs-10">
        <div class="form-inline">
            <div class="form-group">
                <input type="text" class="form-control" placeholder="year"/>
            </div>
            <div class="form-group">
                <input type="text" class="form-control" placeholder="month"/>
            </div>
            <div class="form-group">
                <input type="text" class="form-control" placeholder="day"/>
            </div>
        </div>
    </div>
</div>

Remarquez comment l'ensemble form-inline est imbriqué dans le col-xs-10 div contenant le contrôle du formulaire horizontal. En d'autres termes, l'ensemble du form-inline est le "contrôle" de l'étiquette d'anniversaire dans le formulaire horizontal principal.

Note que vous rencontrerez un problème de marges gauche et droite en imbriquant le formulaire en ligne dans le formulaire horizontal. Pour résoudre ce problème, ajoutez ceci à votre css :

.form-inline .form-group{
    margin-left: 0;
    margin-right: 0;
}

6 votes

Je ne sais pas pourquoi (peut-être quelque chose de cassé dans le dernier bootstrap.css) mais dans votre fichier Démonstration champs year , month et day placés non pas en ligne mais chacun sur une autre ligne.

2 votes

Oh c'est à cause de la petite largeur de l'écran sur jsfiddle. Ajout d'une classe col-xs-3 à <div class="form-group"> a résolu le problème.

3 votes

Pourquoi utilisez-vous <div class="form-group"> au sein de la form-inline de toute façon ? Je ne l'utilise pas, et les marges se font toutes seules sans CSS personnalisé. Est-ce que quelque chose m'échappe ?

16voto

Dan Points 4664

Une autre option consiste à placer tous les champs que vous souhaitez sur une seule ligne, dans un seul fichier form-group .

Voir la démo ici

<form class="form-horizontal">
    <div class="form-group">
        <label for="name" class="col-xs-2 control-label">Name</label>
        <div class="col-xs-10">
            <input type="text" class="form-control col-sm-10" name="name" placeholder="name"/>
        </div>
    </div>

    <div class="form-group">
        <label for="birthday" class="col-xs-3 col-sm-2 control-label">Birthday</label>
        <div class="col-xs-3">
            <input type="text" class="form-control" placeholder="year"/>
        </div>
        <div class="col-xs-3">
            <input type="text" class="form-control" placeholder="month"/>
        </div>
        <div class="col-xs-3">
            <input type="text" class="form-control" placeholder="day"/>
        </div>    
    </div>
</form>

0 votes

Ça m'a aidé en quelque sorte. +1

0 votes

Cette option fonctionne bien tant que vous placez dans un groupe de formulaires des champs qui appartiennent réellement à ce groupe. Pensez à des has_error qui doivent être appliquées au même nœud que les classes de form-group . Lorsque vous mélangez différents champs et étiquettes au sein d'un groupe de formulaires, cette sémantique bootstrap est rompue.

8voto

Derek Points 78

Ce site Bootply L'exemple semble être une bien meilleure option. La seule chose est que les étiquettes sont un peu trop hautes, j'ai donc ajouté padding-top:5px pour les centrer avec mes entrées.

<div class="container">
<h2>Bootstrap Mixed Form <p class="lead">with horizontal and inline fields</p></h2>
<form role="form" class="form-horizontal">
    <div class="form-group">
        <label class="col-sm-1" for="inputEmail1">Email</label>
        <div class="col-sm-5"><input type="email" class="form-control" id="inputEmail1" placeholder="Email"></div>
    </div>
    <div class="form-group">
        <label class="col-sm-1" for="inputPassword1">Password</label>
        <div class="col-sm-5"><input type="password" class="form-control" id="inputPassword1" placeholder="Password"></div>
    </div>
    <div class="form-group">
        <label class="col-sm-12" for="TextArea">Textarea</label>
        <div class="col-sm-6"><textarea class="form-control" id="TextArea"></textarea></div>
    </div>
    <div class="form-group">
        <div class="col-sm-3"><label>First name</label><input type="text" class="form-control" placeholder="First"></div>
        <div class="col-sm-3"><label>Last name</label><input type="text" class="form-control" placeholder="Last"></div>
    </div>
    <div class="form-group">
        <label class="col-sm-12">Phone number</label>
        <div class="col-sm-1"><input type="text" class="form-control" placeholder="000"><div class="help">area</div></div>
        <div class="col-sm-1"><input type="text" class="form-control" placeholder="000"><div class="help">local</div></div>
        <div class="col-sm-2"><input type="text" class="form-control" placeholder="1111"><div class="help">number</div></div>
        <div class="col-sm-2"><input type="text" class="form-control" placeholder="123"><div class="help">ext</div></div>
    </div>
    <div class="form-group">
        <label class="col-sm-1">Options</label>
        <div class="col-sm-2"><input type="text" class="form-control" placeholder="Option 1"></div>
        <div class="col-sm-3"><input type="text" class="form-control" placeholder="Option 2"></div>
    </div>
    <div class="form-group">
        <div class="col-sm-6">
            <button type="submit" class="btn btn-info pull-right">Submit</button>
        </div>
    </div>
</form>
<hr>
</div>

4voto

Max Bertoli Points 267

Pour que cela fonctionne dans Chrome (et bootply), j'ai dû modifier le code de cette manière :

<form class="form-horizontal">
  <div class="form-group">
    <label for="name" class="col-xs-2 control-label">Name</label>
    <div class="col-xs-10">
      <input type="text" class="form-control col-sm-10" name="name" placeholder="name" />
    </div>
  </div>

  <div class="form-group">
    <label for="birthday" class="col-xs-2 control-label">Birthday</label>
    <div class="col-xs-10">
      <div class="form-inline">
        <input type="text" class="form-control" placeholder="year" />
        <input type="text" class="form-control" placeholder="month" />
        <input type="text" class="form-control" placeholder="day" />
      </div>
    </div>
  </div>
</form>

0 votes

Ceci contient du HTML non valide.

0 votes

@JimmyObonyoAbor Je suis un peu en retard à la fête... Mais vous l'étiez aussi, en 2016... Quand reformé a dit que le html n'était pas valide, il l'était en fait... il a été corrigé même pas un mois avant votre commentaire

1voto

Anjana Silva Points 391

Une solution beaucoup plus simple, sans tout l'intérieur form-group éléments

<div class="form-group">
       <label for="birthday" class="col-xs-2 control-label">Birthday</label>
       <div class="col-xs-10">
           <div class="form-inline">
               <input type="text" class="form-control" placeholder="year" style="width:70px;"/>
               <input type="text" class="form-control" placeholder="month" style="width:80px;"/>
               <input type="text" class="form-control" placeholder="day" style="width:100px;"/>                        
           </div>
     </div>
</div>

... et ça ressemblera à ça,

enter image description here

A la vôtre !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X