Lorsque vous utilisez une police à largeur fixe , je voudrais spécifier la largeur d'un élément HTML en caractères .
L'unité "em" est censée être la largeur du caractère M, donc je devrais pouvoir l'utiliser pour spécifier une largeur. Ceci est un exemple:
<html>
<head>
<style>
div {
font-family: Courier;
width: 10em;
}
</style>
</head>
<body>
<div>
1 3 5 7 9 1 3 5 7 9 1
</div>
</body>
</html>
Le résultat n'est pas ce que je voulais car la ligne du navigateur saute après la colonne 15, pas 10:
1 3 5 7 9 1 3 5
7 9 1
(Résultat dans Firefox et Chromium, tous deux dans Ubuntu.)
L'article de Wikipedia dit qu'un "em" n'a pas toujours la largeur d'un M, il semble donc que l'unité "em" ne puisse pas être fiable pour cela.
Réponses:
1em est la hauteur d'un M, plutôt que la largeur. Il en va de même pour ex, qui est la hauteur d'un x. Plus généralement, ce sont les hauteurs des lettres majuscules et minuscules.
La largeur est une question totalement différente ...
Changez votre exemple ci-dessus en
et vous remarquerez que la largeur et la hauteur de la travée sont différentes. Pour une taille de police de 20 px sur Chrome, la portée est de 12 x 22 px, où 20 px est la hauteur de la police et 2 px pour la hauteur de ligne.
Maintenant que em et ex ne sont d'aucune utilité ici, une stratégie possible pour une solution uniquement CSS serait de
Je n'ai cependant pas réussi à coder cela. Je doute aussi que ce soit vraiment possible.
La même logique pourrait cependant être implémentée en Javascript. J'utilise jQuery omniprésent ici:
Le +1 in (w * 10 + 1) sert à gérer les problèmes d'arrondi.
la source
ch
unitéL'unité que vous recherchez est
ch
. Selon la documentation MDN :Il est pris en charge dans les versions actuelles des principaux navigateurs ( caniuse ).
Exemple
la source
 
ou 
. C'est fonctionnellement équivalent à l'ch
unité de CSS, mais bien que cela ne soit pas largement pris en charge, il peut être utilisé comme une solution de contournement en HTML (vilain hack, mais devrait fonctionner).