Korzystając z czcionki o stałej szerokości , chciałbym określić szerokość elementu HTML w znakach .
Jednostka "em" ma być szerokością znaku M, więc powinienem móc jej użyć do określenia szerokości. To jest przykład:
<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>
Wynik nie jest tym, czego chciałem, ponieważ wiersz przeglądarki pęka po kolumnie 15, a nie 10:
1 3 5 7 9 1 3 5
7 9 1
(Wynik w Firefoksie i Chromium, oba w Ubuntu.)
Artykuł Wikipedii mówi, że „em” nie zawsze ma szerokość M, więc zdecydowanie wygląda na to, że jednostce „em” nie można ufać.
Odpowiedzi:
1em to wysokość litery M, a nie szerokość. To samo dotyczy ex, czyli wysokości x. Mówiąc bardziej ogólnie, są to wysokości wielkich i małych liter.
Szerokość to zupełnie inna kwestia ....
Zmień powyższy przykład na
a zauważysz, że szerokość i wysokość przęsła są różne. W przypadku czcionki o rozmiarze 20 pikseli w przeglądarce Chrome rozpiętość wynosi 12 x 22 piksele, gdzie 20 pikseli to wysokość czcionki, a 2 piksele to wysokość linii.
Ponieważ em i ex nie są tutaj przydatne, możliwą strategią dla rozwiązania opartego tylko na CSS byłoby
Jednak nie udało mi się tego zakodować. Wątpię też, żeby to naprawdę było możliwe.
Ta sama logika mogłaby jednak zostać zaimplementowana w Javascript. Używam tutaj wszechobecnego jQuery:
+1 w (w * 10 + 1) służy do rozwiązywania problemów z zaokrąglaniem.
źródło
ch
jednostkaJednostka, której szukasz, to
ch
. Według dokumentów MDN :Jest obsługiwany w aktualnych wersjach głównych przeglądarek ( caniuse ).
Przykład
źródło
 
lub 
. Jest funkcjonalnie równoważny zch
jednostką CSS, ale chociaż nie jest szeroko obsługiwany, może być używany jako obejście w HTML (brzydki hack, ale powinien działać).