2013-08-12 1 views
25

Quando si aggiunge uno input-group a form-inline, lo input-group viene visualizzato sotto il modulo su una "nuova riga" anziché in linea con gli altri controlli.Utilizzo di un gruppo di input all'interno di un modulo in linea

Sembra che questo è perché la classe input-group involucro ha display insieme ai table mentre gli altri ingressi, che funzionano bene, hanno la loro display set di inline-block. Ovviamente, non è possibile fornire lo schermo inline-blockinline-block perché il suo intervallo figlio add-on, che ha display: table-cell, richiede che la proprietà del genitore si allinei correttamente.

Quindi la mia domanda è: è possibile utilizzare input-group all'interno di una forma in linea utilizzando esclusivamente classi bootstrap? In caso contrario, quale sarebbe il miglior work-around consentendo l'uso di classi personalizzate.

Questo è un demo che illustra il mio punto. Il codice è il seguente:

<form action="" class="form-inline"> 
    <input type="text" class="form-control" placeholder="Works with" style="width: 100px;"/> 
    <input type="text" class="form-control" placeholder="Text Inputs" style="width: 120px;"/> 

    <div class="checkbox"> 
     <label> 
      <input type="checkbox" /> and Checkboxes 
     </label> 
    </div> 
    <select class="form-control" style="width: 150px;"> 
     <option>and Selects</option> 
    </select> 

    <button type="submit" class="btn btn-default">and Buttons</button> 
    <div class="input-group" style="width: 220px;"> 
     <span class="input-group-addon">BUT</span> 
     <input type="text" class="form-control" placeholder="not with input-groups" /> 
    </div> 
</form> 
+2

tratta di un errore, forse nel tuo caso è possibile usare 'pull-right' nella classe' input-group'. – PiLHA

+0

Sì, questo potrebbe essere un bug. E usare 'pull-right' non è una buona soluzione indipendentemente dal mio caso: la spaziatura verticale tra gli input è persa e se ci sono due gruppi di input vengono visualizzati in modo errato. IMHO è meglio usare una soluzione funzionante con classi personalizzate piuttosto che un hack errato con classi integrate. – edsioufi

risposta

42

Questo era effettivamente un bug ed è stato risolto (controllare lo issue on github per ulteriori informazioni).

Da ora in poi i moduli in linea in BootStrap richiedono di includere i controlli del modulo figlio con .form-group.

Quindi il mio codice diventerebbe:

<form action="" class="form-inline"> 
    <div class="form-group"> 
     <input type="text" class="form-control" placeholder="Works with" style="width: 100px;"/> 
    </div> 

    ... 
    <div class="form-group"> 
     <div class="input-group" style="width: 220px;"> 
      <span class="input-group-addon">BUT</span> 
      <input type="text" class="form-control" placeholder="not with input-groups" /> 
     </div> 
    </div> 
</form> 
+5

Sono su 3.0.3 e ho ancora questo problema. Aggiungere l'add-on del gruppo di input dopo che il controllo del form ha creato una nuova riga – Marc

+0

@Marc: Sono su 3.0.3 e per fare ciò che vuoi faccio "form.form-inline {display: inline;} form.form -inline .form-group .input-group input + .input-group-addon {width: initial;} ". Non so se è compatibile con tutti i browser. – Gabriel

+1

@Marc: ho dimenticato di dire che l'input necessita di una larghezza o di una larghezza massima. – Gabriel

1

Penso che potrebbe essere necessario separare il modulo in colonne per ottenere il layout in linea che si desidera. Un esempio (penso a quello che cerchi) è sul sito Bootstrap here.

provare a mettere

<div class="col-lg-1"></div> 

intorno i controlli per vedere che cosa voglio dire. Ovviamente devi lavorare su colonne di 12, quindi sarà necessario modificarlo di conseguenza.

+0

Possiamo usare le colonne per allineare qualsiasi controllo di modulo (indipendentemente dal problematico 'gruppo di input'). Ancora, BootStrap fornisce la classe 'form-inline' (che non sarebbe necessaria se fosse incoraggiata l'uso di colonne). Questa [demo] (http://jsfiddle.net/26ZM4/4/) mi fa pensare che la ragione dietro l'esistenza della forma in linea è che l'uso di colonne non produce buoni risultati dal punto di vista del design reattivo. Preferirei ancora le classi personalizzate al design colonnare (o anche ricorrere alle 'forme orizzontali '). – edsioufi