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.