Bootstrap: allinea l'input con il pulsante


299

Perché i pulsanti e gli ingressi non si allineano correttamente in Bootstrap?

Ho provato qualcosa di semplice come:

<input type="text"/><button class="btn">button</button>

Il pulsante è circa 5pxinferiore all'input in chrome / firefox.

inserisci qui la descrizione dell'immagine

Risposte:


551

Twitter Bootstrap 4

In Twitter Bootstrap 4, input e pulsanti possono essere allineati utilizzando le classi input-group-prepende input-group-append(consultare https://getbootstrap.com/docs/4.0/components/input-group/#button-addons )

Pulsante di gruppo sul lato sinistro (anteponi)

<div class="input-group mb-3">
  <div class="input-group-prepend">
    <button class="btn btn-outline-secondary" type="button">Button</button>
  </div>
  <input type="text" class="form-control">
</div>

Pulsante di gruppo sul lato destro (append)

<div class="input-group mb-3">
  <div class="input-group-append">
    <button class="btn btn-outline-secondary" type="button">Button</button>
  </div>
  <input type="text" class="form-control">
</div>

Twitter Bootstrap 3

Come mostrato nella risposta di @abimelex, input e pulsanti possono essere allineati usando le .input-groupclassi (vedi http://getbootstrap.com/components/#input-groups-buttons )

Pulsante di gruppo sul lato sinistro

<div class="input-group">
  <span class="input-group-btn">
    <button class="btn btn-default" type="button">Go!</button>
  </span>
  <input type="text" class="form-control">
</div>

Pulsante di gruppo sul lato destro

<div class="input-group">
   <input type="text" class="form-control">
   <span class="input-group-btn">
        <button class="btn btn-default" type="button">Go!</button>
   </span>
</div>

Questa soluzione è stata aggiunta per mantenere aggiornata la mia risposta, ma ti preghiamo di mantenere il tuo voto positivo sulla risposta fornita da @abimelex .


Twitter Bootstrap 2

Bootstrap offre una .input-appendclasse, che funziona come elemento wrapper e lo corregge per te:

<div class="input-append">
    <input name="search" id="search"/>
    <button class="btn">button</button>
</div>

Come sottolineato da @OleksiyKhilkevich nella sua risposta, c'è un secondo modo per allinearlo inpute buttonusando la .form-horizontalclasse:

<div class="form-horizontal">
    <input name="search" id="search"/>
    <button class="btn">button</button>
</div>

Le differenze

La differenza tra queste due classi è che .input-appendposizionerà il buttoncontro inputsull'elemento (in modo che sembrino collegati), dove.form-horizontal posizionerà uno spazio tra di loro.

-- Nota --

Per consentire agli elementi inpute buttondi essere vicini l'uno all'altro senza spaziatura, font-sizeè stato impostato su 0nella .input-appendclasse (questo rimuove la spaziatura bianca tra gli inline-blockelementi). Ciò può avere un effetto negativo sulle dimensioni dei caratteri inputnell'elemento se si desidera sovrascrivere i valori predefiniti usando emo %misurazioni.


5
Grazie per la tua risposta, ma sento che qualcosa non va qui. Sicuramente non sono la prima persona a desiderare che i componenti del bootstrap siano allineati con elementi di forma.
pguardiario,

@pguardiario - hai perfettamente ragione. Sembrava sbagliato e dopo avermi schiaffeggiato il cervello mi sono ricordato della .input-appendlezione.
Mi fa male la testa

1
Sembra strano che ti serva una classe wrapper per farlo. Non dovrebbero allinearsi per impostazione predefinita?
opsb,

2
@opsb se occupassero la stessa quantità di spazio verticale, sì, lo farebbero. Tuttavia, i campi di input in Twitter Bootstrap hanno un margin-bottom: 9pxma i pulsanti non lo fanno, quindi non occupano lo stesso spazio verticale. Poiché entrambi gli elementi hanno un middleallineamento verticale, il pulsante è sfalsato a causa della differenza. L'uso del .input-appendwrapper rimuove questo valore di margine inferiore.
Mi fa male la testa il

Bene, immagino che romperebbe altri layout di modulo se avessero la stessa altezza verticale di default.
opsb,

187

è possibile utilizzare la proprietà del pulsante del gruppo di input per applicare il pulsante direttamente al campo di input.

Bootstrap 3 e 4

<div class="input-group">
  <input type="text" class="form-control">
  <span class="input-group-btn">
    <button class="btn btn-default" type="button">Go!</button>
  </span>
</div><!-- /input-group -->

Dai un'occhiata al documento BS4 Input-Group per molti altri esempi.

esempio per il pulsante del gruppo di input bs3


3
Altri non hanno funzionato per me, questo invece ha funzionato come volevo. Grazie.
Colandus,

1
Per me non ha funzionato se ho creato un tag span aggiuntivo per allocare la classe, ma ha funzionato se ho aggiunto quella classe al tag div:<div class="form-group input-group-btn">
J0ANMM

Questa risposta è obsoleta per BS4, dai un'occhiata alla mia risposta.
Alexander Kim,

37

Solo il testa a testa, sembra che ci sia una classe CSS speciale per questo chiamato form-horizontal

input-append ha un altro effetto collaterale, che riduce la dimensione del carattere a zero


1
+1 buon posto - Ho dovuto capire perché hanno usato font-size: 0e imparato qualcosa di nuovo :) Grazie!
Mi fa male la testa l'

30

Usa .form-inline = Questo allineerà a sinistra le etichette e i controlli del blocco inline per un layout compatto

Esempio: http://jsfiddle.net/hSuy4/292/

<div class="form-inline">
<input type="text">
<input type="button" class="btn" value="submit">
</div>

.form-horizontal = Allinea a destra le etichette e spostale a sinistra per farle apparire sulla stessa linea dei controlli, il che è meglio per il layout a 2 colonne.

(e.g. 
Label 1: [textbox]
Label 2: [textbox]
     : [button]
)

Esempi: http://twitter.github.io/bootstrap/base-css.html#forms


2
Posso confermare che form-inlinefunziona per Bootstrap 3. Grazie.
austin,

Fantastico! Esattamente quello che mi serviva per una forma problematica!
its_notjack

Sembra che .form-inline funzioni solo all'interno di finestre di almeno 768 pixel
anemaria20

16

Ho provato soprattutto e alla fine ho apportato alcune modifiche che vorrei condividere. Ecco il codice che funziona per me (trova lo screenshot allegato):

<div class="input-group">
    <input type="text" class="form-control" placeholder="Search text">
    <span class="input-group-btn" style="width:0;">
        <button class="btn btn-default" type="button">Go!</button>
    </span>
</div>

inserisci qui la descrizione dell'immagine

Se vuoi vederlo funzionare, usa semplicemente il codice seguente nel tuo editor:

<html>
    <head>
        <link type='text/css' rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css' />
    </head>
    <body>
        <div class="container body-content">
            <div class="form-horizontal">
              <div class="input-group">
                  <input type="text" class="form-control" placeholder="Search text">
                  <span class="input-group-btn" style="width:0;">
                      <button class="btn btn-default" type="button">Go!</button>
                  </span>
              </div>
            </div>
        </div>
    </body>
</html>

Spero che questo ti aiuti.


Per quale versione di Bootstrap è disponibile? E quale problema causa il mancato utilizzo style="width:0;"?
Karl Adler,

Se non usi la larghezza: 0, questo richiederà l'intera larghezza della pagina.
Abhimanyu,

il modo bootstrap si avvolgerebbe con un elemento col come <div class="col-md-4">Non width: 0
Karl Adler,

ho impostato perché non voglio che i controlli di input occupino l'intera larghezza dello schermo
Abhimanyu

6

Avevo anche problemi con lo stesso problema. Le classi bootstrap che utilizzo non funzionano per me. Ho trovato una soluzione alternativa, come di seguito:

<form action='...' method='POST' class='form-group'>
  <div class="form-horizontal">
    <input type="text" name="..." 
        class="form-control" 
        placeholder="Search People..."
        style="width:280px;max-width:280px;display:inline-block"/>

    <button type="submit" 
        class="btn btn-primary" 
        style="margin-left:-8px;margin-top:-2px;min-height:36px;">
      <i class="glyphicon glyphicon-search"></i>
     </button>
  </div>
</form>

Fondamentalmente, ho scavalcato la proprietà display della classe "form-control", e ho usato altre proprietà di stile per correggere dimensioni e posizione.

Di seguito è riportato il risultato:

inserisci qui la descrizione dell'immagine



4
<form class="form-inline">
  <div class="form-group">
    <label class="sr-only" for="exampleInputEmail3">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail3" placeholder="Email">
  </div>
  <button type="submit" class="btn btn-default">Sign in</button>
</form>

3

Ho provato tutti i codici di cui sopra e nessuno di essi ha risolto i miei problemi. Ecco cosa ha funzionato per me. Ho usato l'input-group-addon.

<div class = "input-group">
  <span class = "input-group-addon">Go</span>
  <input type = "text" class = "form-control" placeholder="you are the man!">
</div>

1

Non direttamente correlato, a meno che tu non abbia un codice simile ma ho appena notato uno strano comportamento nel form-inline, bootstrap 3.3.7

Non ho usato righe e celle per questo in quanto è un progetto desktop, se il tag di apertura era sotto la tabella (in questo caso):

<table class="form-inline"> 
<form> 
<tr>

Gli elementi del modulo si accumulerebbero.

Switch e allineato correttamente.

<form>
<table class="form-inline">
<tr>

Safari 10.0.2 e Chrome più recenti non hanno fatto alcuna differenza. Forse il mio layout era sbagliato ma non è molto tollerante.


1

Prendi un input float come a sinistra. Quindi prendere il pulsante e spostarlo a destra. Puoi cancellare la classe quando ne prendi più di una a distanza.

<input style="width:65%;float:left"class="btn btn-primary" type="text" name="name"> 
<div style="width:8%;float:left">&nbsp;</div>
<button class="btn btn-default" type="button">Go!</button>
<div class="clearfix" style="margin-bottom:10px"> </div>

-1
style="padding-top: 8px"

Usa questo per spostare il div in alto o in basso nella riga. Fa miracoli per me.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.