Come allineare verticalmente un pulsante di opzione HTML alla sua etichetta?


95

Ho un modulo con pulsanti di opzione che si trovano sulla stessa riga delle loro etichette. I pulsanti di opzione, tuttavia, non sono allineati verticalmente con le rispettive etichette, come mostrato nella schermata seguente.

I pulsanti di opzione.

Come posso allineare verticalmente i pulsanti di opzione con le loro etichette?

Modificare:

Ecco il codice html:

<input checked="checked" type="radio" name="user_level" id="rd1" value="1"/>
<label for="rd1">radio 1</label><br/>
<input type="radio" name="user_level" id="rd2" value="2"/>
<label for="rd2">radio 2</label><br/>
<input type="radio" name="user_level" id="rd3" value="3"/>
<label for="rd3">radio 3</label><br/>

E il codice css:

label{
    padding:5px;
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
    margin: 10px;
}

1
Com'è il tuo codice in questo momento?
George,

@ninjacoder Aggiorna la tua domanda con il codice.
Muthu Kumaran

Risposte:


149

Prova questo:

input[type="radio"] {
  margin-top: -1px;
  vertical-align: middle;
}

9
Questo ha funzionato per me, tuttavia ho dovuto aggiungere un height= 100%;poiché il mio elemento genitore non ha impostato esplicitamente l'altezza.
DaKaZ

1
Questo sembrava offrirmi l'approccio più coerente tra Mac, Windows e Linux, utilizzando Chrome, Firefox o IE. Inoltre, ho notato che se do il padding sulla mia etichetta e metto la radio all'interno dell'etichetta, allora potrei aver bisogno di impostare il margin-top su un valore inferiore a -1px (come -3px) in base a quanto padding stavo usando quell'etichetta. (Mi piace dare alle etichette della mia radio box un colore al passaggio del mouse e un effetto bordo arrotondato per farle sembrare più fresche.)
Volomike

3
Per spiegare perché questa è l'unica risposta corretta: alcuni elementi in HTML hanno valori di margine o riempimento predefiniti, come gli elementi <p> ​​o <li> oi pulsanti di opzione. Puoi vederlo se accedi alla modalità sviluppatore (F12) e passa il mouse sopra il tag. In realtà, questo è un buon comportamento, perché il browser stesso utilizza i CSS per posizionare elementi predefiniti che l'utente può quindi reimpostare. Ma può creare confusione se non sai perché qualcosa è disallineato in primo luogo. Quindi cerca sempre di sovrascrivere le impostazioni che non hai impostato, se sembra strano per impostazione predefinita.
StanE

Questo non sembra funzionare quando aumenti o diminuisci la dimensione del carattere. Per favore, dimostra che mi sbaglio con un esempio funzionante, però!
Protector one

15
input {
    display: table-cell;
    vertical-align: middle
}

Metti lezione per tutte le radio. Questo funzionerà per tutti i pulsanti di opzione nella pagina html.

Violino


Questa è di gran lunga la migliore soluzione che ho visto per questo. L'allineamento dell'etichetta del pulsante radio mi ha tormentato per anni fino a questo momento. Funziona ogni volta per me.
G-Man

Notare che questo si interrompe quando l'etichetta ha più righe di testo.
Daan

Il tuo esempio di Fiddle si applica anche padding: 0; margin: 0agli elementi di input e sembra essere necessario per ottenere il giusto allineamento.
Emmanuel Bourg

13

So di aver selezionato la risposta di menuka devinda ma guardando i commenti sotto ho concordato e ho cercato di trovare una soluzione migliore. Sono riuscito a trovare questo e secondo me è una soluzione molto più elegante:

input[type='radio'], label{   
    vertical-align: baseline;
    padding: 10px;
    margin: 10px;
 }

Grazie a tutti coloro che hanno offerto una risposta, la tua risposta non è passata inosservata. Se hai ancora altre idee, sentiti libero di aggiungere la tua risposta a questa domanda.


9

prova ad aggiungere vertical-align:topnel css

label{
    padding:5px;
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
    margin: 10px;
    vertical-align:top;
}​

Test: http://jsfiddle.net/muthkum/heAWP/


1
Questo non regge quando aumenti o diminuisci la dimensione del carattere.
Protector one

@Protectorone Questa è una vecchia risposta e specifica per la domanda OP. Se stai cercando di fare lo stesso con, font-sizeprova a usare display:flex. Ecco una demo, jsfiddle.net/et8z47q5
Muthu Kumaran

8

Tanto vale aggiungere un po 'di flessibilità alle risposte.

.Radio {
  display: inline-flex;
  align-items: center;
}

.Radio--large {
  font-size: 2rem;
}

.Radio-Input {
  margin: 0 0.5rem 0;
}
<div>
  <label class="Radio" for="sex-female">
    <input class="Radio-Input" type="radio" id="sex-female" name="sex" value="female" />
    Female
  </label>

  <label class="Radio" for="sex-male">
    <input class="Radio-Input" type="radio" id="sex-male" name="sex" value="male" />
    Male
  </label>
</div>


<div>
  <label class="Radio Radio--large" for="sex-female2">
    <input class="Radio-Input" type="radio" id="sex-female2" name="sex" value="female" />
    Female
  </label>

  <label class="Radio Radio--large" for="sex-male2">
    <input class="Radio-Input" type="radio" id="sex-male2" name="sex" value="male" />
    Male
  </label>
</div>


7

Puoi fare così:

input {
    vertical-align:middle;
}

label{
    color:#222;
    font-family:corbel,sans-serif;
    font-size: 14px;
}

DEMO


Molto bene. Volevo allineare il pulsante invece dell'etichetta e questo fa il trucco.
posfan12

1

Qualcosa di simile dovrebbe funzionare

CSS:

input {
    float: left;
    clear: left;
    width: 50px;
    line-height: 20px;
}

label {
    float: left;
    vertical-align: middle;
}

1
label, input {
    vertical-align: middle;
}

Sto solo allineando il punto medio verticale delle caselle con la linea di base della casella genitore più metà dell'altezza x (en.wikipedia.org/wiki/X-height) del genitore.


1

Molte di queste risposte dicono di usare vertical-align: middle;, che ottiene l'allineamento vicino ma per me è ancora spento di alcuni pixel. Il metodo che ho usato per ottenere un allineamento 1 a 1 vero tra le etichette e gli ingressi radio è questo, con vertical-align: top;:

label, label>input{
    font-size: 20px;
    display: inline-block;
    margin: 0;
    line-height: 28px;
    height: 28px;
    vertical-align: top;
}
<h1>How are you?</h1>
<fieldset>
	<legend>Your response:</legend>
	<label for="radChoiceGood">
		<input type="radio" id="radChoiceGood" name="radChoices" value="Good">Good
	</label>
	
	<label for="radChoiceExcellent">
		<input type="radio" id="radChoiceExcellent" name="radChoices" value="Excellent">Excellent
	</label>
	
	<label for="radChoiceOk">
		<input type="radio" id="radChoiceOk" name="radChoices" value="OK">OK
	</label>
</fieldset>


1

Mi piace inserire gli input all'interno delle etichette (vantaggio aggiuntivo: ora non è necessario l' forattributo sull'etichetta) e inserire vertical-align: middlel'input.

label > input[type=radio] {
    vertical-align: middle;
    margin-top: -2px;
}

#d2 {  
    font-size: 30px;
}
<div>
	<label><input type="radio" name="radio" value="1">Good</label>
	<label><input type="radio" name="radio" value="2">Excellent</label>
<div>
<br>
<div id="d2">
	<label><input type="radio" name="radio2" value="1">Good</label>
	<label><input type="radio" name="radio2" value="2">Excellent</label>
<div>

( -2px margin-topÈ una questione di gusti.)

Un'altra opzione che mi piace molto è usare un tavolo. (Tieni le tue forchette di presentazione! È davvero bello!) Significa che devi aggiungere l' forattributo a tutte le tue etichette ides ai tuoi input. Ho consigliato questa opzione per le etichette con contenuto di testo lungo, su più righe.

<table><tr><td>
    <input id="radioOption" name="radioOption" type="radio" />
    </td><td>
    <label for="radioOption">                     
        Really good option
    </label>
</td></tr></table>


0

Anche se sono d'accordo che le tabelle non dovrebbero essere utilizzate per layout di progettazione contrariamente alla credenza popolare, superano la convalida. cioè il tag table non è deprecato. Il modo migliore per allineare i pulsanti di opzione è utilizzare il CSS centrale di allineamento verticale con i margini regolati sugli elementi di input.


-1

Aggiungere display:inline-blockalle etichette e assegnarle padding-toprisolverebbe il problema, credo. Inoltre, anche solo impostando il line-heightsulle etichette.


-2

ci sono diversi modi, uno che preferirei è usare una tabella in html. puoi aggiungere due colori e tre righe di tabella e posizionare i pulsanti di opzione e l'etichetta.

<table border="0">

<tr>
  <td><input type="radio" name="sex" value="1"></td>
  <td>radio1</td>

</tr>
<tr>
  <td><input type="radio" name="sex" value="2"></td>
  <td>radio2</td>

</tr>
</table>

6
Si prega di non utilizzare tabelle per scopi di layout.
PeeHaa

4
-1 tabelle non dovrebbero essere usate per il layout e questo codice non supererà la validazione ... @ninjacoder, perché diavolo hai scelto questo come "risposta"?
tereško

7
Anzi .. seriamente .. ogni volta che qualcuno insegna a usare le tabelle per il markup dei moduli, un simpatico gattino muore da qualche parte nel mondo ..
Damien Overeem

2
@PeeHaa, tereško, Damien Overeem Penso che probabilmente avete ragione, sono riuscito a trovare la mia soluzione che ho pubblicato qui sotto. Grazie ragazzi! Il tuo aiuto e consiglio sono molto apprezzati.
ninjacoder

3
Ho provato le altre opzioni e non erano molto buone. Le tabelle funzionano. .tablecell{dispay:table-cell;} ... <div class="tablecell">sembra più una soluzione alternativa per le persone che non vogliono ammettere che stanno usando le tabelle ...
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.