Bootstrap input di testo a larghezza intera in formato inline


138

Sto lottando per creare una casella di testo che si adatti all'intera larghezza dell'area del mio contenitore .

<div class="row">
    <div class="col-md-12">
        <form class="form-inline" role="form">           
                <input type="text" class="form-control input-lg" id="search-church" placeholder="Your location (City, State, ZIP)">
                <button type="submit" class="btn btn-lg">Search</button>            
        </form>
    </div>
</div>

Quando faccio quanto sopra, i due elementi del modulo sono in linea, come mi aspetto, ma nella migliore delle ipotesi non occupano più di alcune colonne. Passare il mouse sopra il col-md-12div in firebug mostra che occupa l'intera larghezza prevista. È solo l'input di testo che non sembra riempire. Ho anche provato ad aggiungere un valore di larghezza in linea ma non ha cambiato nulla. So che dovrebbe essere semplice, ora mi sento davvero stupido.

Ecco un violino: http://jsfiddle.net/52VtD/4119/embedded/result/

MODIFICARE:

La risposta selezionata è completa in ogni modo e un aiuto meraviglioso. È quello che ho finito per usare. Tuttavia, penso che il mio problema iniziale fosse in realtà un problema con il modello MVC5 predefinito in Visual Studio 2013. Lo conteneva in Site.css:

input,
select,
textarea {
    max-width: 280px;
}

Ovviamente questo stava bloccando l'espansione del testo in input in modo appropriato ... Un avvertimento equo ai futuri utenti del modello ASP.NET ...


6
Voglio solo secondare le tue scoperte sul problema con il modello MVC5 predefinito. Ho appena trascorso un'ora a cercare questo problema e (falsamente) a maledire Bootstrap prima di trovare un campione funzionante in jsfiddle che mi ha spinto a ricominciare con una pagina HTML pulita e ha funzionato bene. Solo allora ho capito che c'era un problema con il modello VS2013 e mi sono imbattuto in questo post. Bontà sa perché la decisione per la larghezza massima, ma dimostra che devi stare attento quando usi il codice di altre persone. È anche testimonianza di tornare alle origini quando bloccato con un problema come questo.
Jason Snelders il

2
Grazie, usando anche il modello asp.net, ma ho già impostato la larghezza massima dell'input su nessuno, ma non occupa ancora l'intera larghezza, solo se lo imposto manualmente al 100%. Ma poi il pulsante giusto si abbassa e voglio che rimanga sulla stessa linea.
Ronen Festinger,

@Killnine La modifica della tua domanda ha risolto i miei mal di testa. In effetti era il problema, grazie per aver modificato il tuo post!
Flame_Phoenix,

Ho rimosso quel pezzetto di CSS dal mio file site.css e sto ancora riscontrando lo stesso problema. Qualche idea?
dave317,

1
Dayuuumn! Sono stato alle prese con questo e si scopre che è un problema MVC! Quanto sono stupido per non aver ispezionato le proprietà CSS della casella di testo! Grazie per averlo segnalato!
Hajjat,

Risposte:


99

I documenti bootstrap parlano di questo :

Richiede larghezze personalizzate Gli input, le selezioni e le aree di testo sono larghe al 100% per impostazione predefinita in Bootstrap. Per utilizzare il modulo incorporato, dovrai impostare una larghezza sui controlli del modulo utilizzati all'interno.

La larghezza predefinita del 100% che ottengono tutti gli elementi del modulo quando ottengono la classe form-controlnon si applica se si utilizza la form-inlineclasse nel modulo.

Puoi dare un'occhiata al bootstrap.css (o .less, qualunque cosa tu preferisca) dove troverai questa parte:

.form-inline {

  // Kick in the inline
  @media (min-width: @screen-sm-min) {
    // Inline-block all the things for "inline"
    .form-group {
      display: inline-block;
      margin-bottom: 0;
      vertical-align: middle;
    }

    // In navbar-form, allow folks to *not* use `.form-group`
    .form-control {
      display: inline-block;
      width: auto; // Prevent labels from stacking above inputs in `.form-group`
      vertical-align: middle;
    }
    // Input groups need that 100% width though
    .input-group > .form-control {
      width: 100%;
    }

    [...]
  }
}

Forse dovresti dare un'occhiata ai gruppi di input , dato che immagino che abbiano esattamente il markup che vuoi usare (lavorando il violino qui ):

<div class="row">
   <div class="col-lg-12">
    <div class="input-group input-group-lg">
      <input type="text" class="form-control input-lg" id="search-church" placeholder="Your location (City, State, ZIP)">
      <span class="input-group-btn">
        <button class="btn btn-default btn-lg" type="submit">Search</button>
      </span>
    </div>
  </div>
</div>

3
Vedi la mia modifica sopra. Penso che Site.css nel modello ASP.NET possa avermi ottenuto su questo. Tuttavia, questa è una risposta formidabile e molto utile per riferimenti futuri.
Killnine

5
i gruppi di input sono la strada da percorrere. Personalmente, modifico lo stile del gruppo di input in modo che assomigli ad un modulo incorporato quando non desidero il pulsante immediatamente accanto all'input. Demo funzionante con Bootstrap MENO incluso: jsfiddle.net/silb3r/gwxc5c75
cfx

1
simpatico! So che la domanda è specifica per bootstrap, ma se qualcun altro vuole rilasciarla in un sito bootstrapless (non bootstrap LESS;) ho estratto qui gli stili pertinenti: stackoverflow.com/a/27413796/1241736
henry

Il collegamento Bootstrap nel violino è interrotto. Probabilmente punta a una nuova versione di Bootstrap e il violino non funziona più.
Chloe,

@Chloe Hai ragione, il violino stava usando un file css bootstrap che non esiste più. Ho appena aggiornato il violino, funziona di nuovo.
morten.c

32

dai un'occhiata a qualcosa del genere:

<form role="form">  
    <div class="row">
      <div class="col-xs-12">
        <div class="input-group input-group-lg">
            <input type="text" class="form-control" />
          <div class="input-group-btn">
            <button type="submit" class="btn">Search</button>
          </div><!-- /btn-group -->
        </div><!-- /input-group -->
      </div><!-- /.col-xs-12 -->
    </div><!-- /.row -->
</form>

http://jsfiddle.net/n6c7v/1/


10

Come indicato in una domanda simile , prova a rimuovere le istanze della input-groupclasse e vedi se questo aiuta.

riferendosi al bootstrap:

I controlli dei singoli moduli ricevono automaticamente uno stile globale. Tutti gli elementi testuali, e, con .form-control sono impostati su larghezza: 100%; per impostazione predefinita. Avvolgere etichette e controlli in .form-group per una spaziatura ottimale.


Per mortale questo non si applica ai moduli in linea. Pertanto, è necessario il gruppo di input per forzarlo al 100%
user441058

3

Prova qualcosa come qui sotto per ottenere il risultato desiderato

input {
    max-width: 100%;
}

1

Con Bootstrap> 4.1 è solo un caso di utilizzo delle classi di utilità flexbox. Basta avere un contenitore flexbox all'interno della colonna, quindi assegnare a tutti gli elementi al suo interno la classe "flex-fill". Come per i moduli in linea, dovrai impostare tu stesso i margini / riempimento degli elementi.

.prop-label {
    margin: .25rem 0 !important;
}

.prop-field {
    margin-left: 1rem;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<div class="row">
	<div class="col-12">
		<div class="d-flex">
			<label class="flex-fill prop-label">Label:</label>
			<input type="text" class="flex-fill form-control prop-field">
		</div>
	</div>
</div>

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.