Attention ! Cette réponse est trop vieux et ne fonctionne pas sur les navigateurs modernes.
Je ne suis pas l'auteur de cette réponse, mais au moment où j'écris ces lignes, c'est de loin la réponse la plus votée, tant en votes positifs que négatifs (+1035 -17), et elle est toujours marquée comme réponse acceptée (probablement parce que l'auteur original de la question est celui qui a écrit cette réponse).
Comme déjà noté de nombreuses fois dans les commentaires, cette réponse ne fonctionne plus sur la plupart des navigateurs (et semble échouer à le faire depuis 2013).
Après plus d'une heure d'ajustements, de tests et d'essais de différents styles de balises, je pense avoir trouvé une solution décente. Les exigences pour ce projet particulier étaient :
- Les entrées doivent être sur leur propre ligne.
- Les cases à cocher doivent être alignées verticalement avec le texte de l'étiquette de manière similaire (voire identique) dans tous les navigateurs.
- Si le texte de l'étiquette s'enroule, il doit être indenté (pour ne pas s'enrouler sous la case à cocher).
Avant d'entrer dans les explications, je vais vous donner le code :
label {
display: block;
padding-left: 15px;
text-indent: -15px;
}
input {
width: 13px;
height: 13px;
padding: 0;
margin:0;
vertical-align: bottom;
position: relative;
top: -1px;
*overflow: hidden;
}
<form>
<div>
<label><input type="checkbox" /> Label text</label>
</div>
</form>
Voici l'exemple de travail dans JSFiddle .
Ce code suppose que vous utilisez une réinitialisation comme celle d'Eric Meyer qui ne remplace pas les marges et le remplissage des formulaires (d'où l'intégration des réinitialisations de marge et de remplissage dans le CSS de l'entrée). Évidemment, dans un environnement réel, vous aurez probablement à imbriquer/supprimer des choses pour supporter d'autres éléments d'entrée, mais je voulais garder les choses simples.
Des choses à noter :
- Le site
*overflow
La déclaration est un hack IE en ligne (le hack de la propriété étoile). IE 6 et 7 le remarquent, mais Safari et Firefox l'ignorent. Je pense qu'il s'agit d'un CSS valide, mais il est préférable d'utiliser des commentaires conditionnels ; je l'ai utilisé pour des raisons de simplicité.
- D'après ce que je sais, le seul
vertical-align
La déclaration qui était cohérente sur tous les navigateurs était vertical-align: bottom
. Ce réglage, puis le positionnement relatif vers le haut, se sont comportés de manière presque identique dans Safari, Firefox et IE, avec seulement un ou deux pixels d'écart.
- Le problème majeur lorsqu'on travaille avec l'alignement est qu'IE colle un tas d'espace mystérieux autour des éléments de saisie. Ce n'est ni un padding ni une marge, et c'est sacrément persistant. Définir une largeur et une hauteur pour la case à cocher, puis
overflow: hidden
Pour une raison quelconque, l'espace supplémentaire est supprimé et le positionnement d'IE est très similaire à celui de Safari et de Firefox.
- En fonction de la taille de votre texte, vous devrez sans doute ajuster le positionnement relatif, la largeur, la hauteur, etc. pour que tout soit parfait.
J'espère que cela aidera quelqu'un d'autre ! Je n'ai pas essayé cette technique spécifique sur d'autres projets que celui sur lequel je travaillais ce matin, alors n'hésitez pas à m'informer si vous trouvez quelque chose qui fonctionne plus régulièrement.
Attention ! Cette réponse est trop vieux et ne fonctionne pas sur les navigateurs modernes.
9 votes
Placez chaque case à cocher et chaque étiquette dans un élément <li>. Ajoutez overflow:hidden à l'élément <li> et faites flotter l'étiquette et la case à cocher à gauche. Ils s'alignent alors parfaitement. Ne mettez pas la case à cocher dans l'élément label évidemment.
6 votes
J'ai réussi à le faire en utilisant
height
etline-height
attributs, jetez un coup d'œil à jsfiddle.net/wepw5o57/30 votes
Manipulation avec
position
ettop
résoudra ce problème Exemple : jsfiddle.net/ynkjc22s0 votes
2019. toujours le même problème. toujours besoin de quelques bidouillages pour le faire fonctionner :(
0 votes
@dieter voir ma réponse, j'ai expliqué pourquoi les hacks sont nécessaires et quelle approche n'est pas hacky : stackoverflow.com/a/56558431/3995261