2010-10-06 6 views
6

Sto provando a visualizzare un numero di ingressi e delle etichette corrispondenti. Sono entrambi elementi inline, e ho una soluzione di lavoro con l'aggiunta di un tag br alla fine in questo modolinea di rottura dopo inserimento senza html markup

<label for="hello"></label> 
<input id="hello" type="text" /> 
<br> 
<label for="stackoverflow"></label> 
<input id="stackoverflow" /> 

Id piacerebbe risolvere questo senza estranea markup HTML, cioè con i CSS. Qual è il modo più semplice per farlo?

ho visto altre domande simili a questo, ma allineamento per riga invece che per colonna.

+0

Solo per amor di discussione, questo --is - dati tabulari. C'era un certo elemento HTML creato per gestire quello .... basta dire ' – bpeterson76

risposta

11

Puoi avvolgere le etichette intorno agli ingressi e li visualizza come blocchi:

<style> 
    label { display: block; } 
</style> 

<label> 
    Hello: <input name="hello"> 
</label> 
<label> 
    StackOverflow: <input name="stackoverflow"> 
</label> 

noti che quando si esegue questa operazione non è necessario utilizzare l'attributo for="name".

L'altro modo (se non si desidera che le etichette avvolte intorno agli ingressi) è quello di galleggiare le etichette a sinistra:

<style> 
    label { float: left; clear: left; } 
</style> 

Tuttavia, io in genere preferisco un po 'più di markup, qualcosa che collega la label e input in un solo elemento logico, chiamato campo:

<div class="field"> 
    <label for="hello">Hello</label> 
    <input name="hello"> 
</div> 
<div class="field"> 
    <label for="stackoverflow">Stackoverflow</label> 
    <input name="stackoverflow"> 
</div> 

poiché ogni campo è un div, verrà visualizzato come un blocco automatica lly, ma puoi controllarlo anche per i singoli campi.

+1

Il tuo div "campo" è essenzialmente come lo faccio anch'io. –

+0

L'etichetta è mobile: sinistra; clear: left lo ha fatto per me – jocken

1

Provare a impostare display:inline-block per gli elementi input e label. Quindi è possibile aggiungere tutti css specifico elemento di blocco come witdh o margin-bottom.

È anche possibile impostare il vostro input e label-display:block e aggiungere margin-bottom solo al l'ingresso. Oppure si può invertire e aggiungere un margin-top alle etichette;)

Se si desidera rimuovere il margine sull'ultimo elemento è possibile utilizzare input:last-child {margin-bottom:0;}

input, label {display:block;} 
input {margin-bottom:18px;} 
input:last-child {margin-bottom:0;} 

/* Or to be specific you can use the attribut-selector 
    which only works on inputs with type="text" 
*/ 
input[type="text"]:last-child {margin-bottom:0;} 
+0

Un buon suggerimento, ma avrebbe comunque messo tutto su una riga (label-input-label-input) senza markup extra. –

+0

Hai ragione. Ma in questo caso puoi impostare entrambi gli elementi da visualizzare: blocca e aggiungi un margine inferiore solo agli elementi di input. Ho aggiornato la mia risposta. – gearsdigital