J'ai un formulaire avec des boutons radio qui sont sur la même ligne que leurs étiquettes. Les boutons radio ne sont toutefois pas alignés verticalement avec leurs étiquettes, comme illustré dans la capture d'écran ci-dessous.
Comment puis-je aligner verticalement les boutons radio avec leurs étiquettes?
Modifier:
Voici le code 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/>
Et le code css:
label{
padding:5px;
color:#222;
font-family:corbel,sans-serif;
font-size: 14px;
margin: 10px;
}
Essaye ça:
input[type="radio"] {
margin-top: -1px;
vertical-align: middle;
}
Je sais que j'avais sélectionné la réponse de menuka devinda, mais en regardant les commentaires ci-dessous, je suis d'accord et j'ai essayé de trouver une meilleure solution. J'ai réussi à trouver cela et à mon avis c'est une solution beaucoup plus élégante:
input[type='radio'], label{
vertical-align: baseline;
padding: 10px;
margin: 10px;
}
Merci à tous ceux qui ont offert une réponse, votre réponse n’est pas passée inaperçue. Si vous avez encore d'autres idées, n'hésitez pas à ajouter votre propre réponse à cette question.
input {
display: table-cell;
vertical-align: middle
}
Mettez la classe pour toute la radio. Cela fonctionnera pour tous les boutons radio de la page html.
essayez d'ajouter vertical-align:top
dans le css
label{
padding:5px;
color:#222;
font-family:corbel,sans-serif;
font-size: 14px;
margin: 10px;
vertical-align:top;
}
Vous pouvez faire comme ça:
input {
vertical-align:middle;
}
label{
color:#222;
font-family:corbel,sans-serif;
font-size: 14px;
}
Autant ajouter un peu de souplesse aux réponses.
.Radio {
display: inline-flex;
align-items: center;
}
.Radio input {
margin-right: 5px;
}
.Radio--Large {
font-size: 2rem;
}
<div>
<label class="Radio" for="sex-female">
<input type="radio" id="sex-female" name="sex" value="female" />
Female
</label>
<label class="Radio" for="sex-male">
<input type="radio" id="sex-male" name="sex" value="male" />
Male
</label>
</div>
<div>
<label class="Radio Radio--Large" for="sex-female2">
<input type="radio" id="sex-female2" name="sex" value="female" />
Female
</label>
<label class="Radio Radio--Large" for="sex-male2">
<input type="radio" id="sex-male2" name="sex" value="male" />
Male
</label>
</div>
label, input {
vertical-align: middle;
}
Je viens d'aligner le point médian vertical des cases sur la ligne de base de la case parente plus la moitié de la hauteur x (en.wikipedia.org/wiki/X-height) du parent.
Quelque chose comme ça devrait marcher
CSS:
input {
float: left;
clear: left;
width: 50px;
line-height: 20px;
}
label {
float: left;
vertical-align: middle;
}
Beaucoup de ces réponses disent d'utiliser vertical-align: middle;
, qui aligne de près l'alignement, mais pour moi, il est toujours décalé de quelques pixels. La méthode que j’utilisais pour obtenir un alignement vrai 1 à 1 entre les étiquettes et les entrées radio est la suivante, avec 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>
Ajouter display:inline-block
aux étiquettes et leur donner padding-top
pourrait résoudre ce problème, je pense. En outre, définir le line-height
sur les étiquettes le serait également.
J'aime mettre les entrées à l'intérieur des étiquettes (bonus supplémentaire: vous n'avez plus besoin de l'attribut for
sur l'étiquette) et mettez vertical-align: middle
sur l'entrée.
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>
(Le -2px margin-top
est une question de goût.)
Une autre option que j'aime beaucoup consiste à utiliser une table. (Tenez votre diapason! C'est vraiment agréable!) Cela signifie que vous devez ajouter l'attribut for
à toutes vos étiquettes et id
s à vos entrées. J'avais recommandé cette option pour les étiquettes avec un texte long, sur plusieurs lignes.
<table><tr><td>
<input id="radioOption" name="radioOption" type="radio" />
</td><td>
<label for="radioOption">
Really good option
</label>
</td></tr></table>
Bien que je convienne que les tableaux ne doivent pas être utilisés pour des mises en page de concept contraires à la croyance populaire, ils passent la validation. c'est-à-dire que la balise de table n'est pas obsolète. Le meilleur moyen d'aligner les boutons radio consiste à utiliser le CSS centré sur l'alignement vertical avec des marges ajustées sur les éléments d'entrée.