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
<div>
<span>1</span> 3 5 7 9 1 3 5 7 9 1
</div>
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
- Utwórz element zawierający tylko & nbsp;
- Niech sam się dostosuje
- Umieść swój element DIV wewnątrz i
- Spraw, aby był 10 razy większy niż otaczający element.
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:
<html>
<head>
<style>
body { font-size: 20px; font-family: Monospace; }
</style>
<script
type="text/javascript"
src ="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js">
</script>
</head>
<body>
<div>1 3 5 7 9 1 3 5 7 9 1</div>
<script>
$('body').append('<div id="testwidth"><span> </span></div>');
var w = $('#testwidth span').width();
$('#testwidth').remove();
$('div').css('width', (w * 10 + 1) + 'px');
</script>
</body>
</html>
+1 w (w * 10 + 1) służy do rozwiązywania problemów z zaokrąglaniem.