2009-05-22 10 views
69

Ho una forma semplice come (solo a scopo illustrativo) in modo ...Seleziona input e input di testo in HTML: il modo migliore per ottenere una larghezza uguale?

<form> 

    <div class="input-row"> 
     <label>Name</label> 
     <input type="text" name="name" /> 
    </div> 

    <div class="input-row"> 
     <label>Country</label> 
     <select name="country"> 
     <option>Australia</option> 
     <option>USA</option> 
     </select> 
    </div> 

</form> 

Il mio metodo di layout con i CSS è la seguente ...

form { 
    width: 500px; 
} 

form .input-row { 
    display: block; 
    width: 100%; 
    height: auto; 
    clear: both; 
    overflow: hidden; /* stretch to contain floated children */ 
    margin-bottom: 10px; 
} 

form .input-row label { 
    display: block; 
    float: left; 
} 

form .input-row input, 
form .input-row select { 
    display: block; 
    width: 50%; 
    float: right; 
    padding: 2px; 
} 

Questo tutti allinea abbastanza bene, ad eccezione del mio elemento select (comunque in Firefox) non è sempre la stessa larghezza degli altri elementi input. In genere è più stretto di pochi pixel.

Ho provato a cambiare la larghezza in una dimensione in pixel (ad esempio 200px) ma non ha fatto la differenza.

Qual è il modo migliore per ottenere che tutti abbiano la stessa larghezza? Spero che non ricorra a me impostando i width di select singolarmente o inserendoli nelle tabelle ...

+26

Posso dirti un piccolo segreto sporco? Uso le tabelle per formattare le mie forme. È solo troppo facile. Ma Sssssshh, tienilo basso. –

+0

In tutta serietà, però, hai provato a impostare margine e riempimento su 0? –

+0

Paolo, l'ho fatto in origine (ed è stato facile rendere gli input della stessa larghezza) ma ho cercato di farlo meno e sono riuscito negli ultimi 8 mesi o giù di lì ... questo mi sta solo dando dolore. – alex

risposta

160

La soluzione è quella di specificare il modello di dialogo per gli elementi di forma, e browser tendenzialmente d'accordo la maggior parte quando si utilizza border-box:

input, select, textarea { 
    -webkit-box-sizing: border-box; 
    -moz-box-sizing: border-box; 
      box-sizing: border-box; 
} 

C'è normalize.css progetto che aggrega questi trucchi.

+0

Potrebbe fare un tentativo ... avete qualche lettura consigliata sull'argomento? – alex

+9

questo ha funzionato per me, brillante. Questo mi ha tormentato da anni. – SpliFF

+0

Non ho raccomandato di leggerlo, tranne tra le righe delle specifiche CSS. Definisce gli elementi del modulo come "Elementi sostituiti" e non richiede ai browser di modellarli, ovvero da dove iniziano i problemi. – Kornel

0

il padding renderà il testo più vicino al bordo della casella.

provare l'impostazione del margine 0px, e se questo sembra giusto, giocare con essa (come solo impostando margin-left solo)

+0

Ho provato a utilizzare il padding: 0 e margin: 0 con!importante per gli input, select e input-row div, ma li raggruppa strettamente. La casella di selezione è di circa 2px più stretta (che potrebbe avere qualcosa a che fare con il bordo) – alex

0

Aveva gli stessi problemi con la tabella e le celle con larghezza del 100%, con una casella di testo (anch'essa con larghezza al 100%) più ampia della cella della tabella.

Questo risolto il problema nel css:

table td 
{ 
    padding-right: 8px; 
} 

Non è la soluzione migliore in assoluto, perché probabilmente si ottiene qualche ulteriore spazio sul lato destro. Ma almeno non si nasconde più!

+1

Sono dubbioso su tali dimensioni assolute. Se si utilizza un altro browser, un altro stile Window Manager/Windows, è probabile che questo non funzioni più. – stracktracer

Problemi correlati