Ответ 1
1em - это высота М, а не ширина. То же самое верно для ex, которое является высотой x. В более общем плане это высоты букв верхнего и нижнего регистра.
Ширина - это совершенно другая проблема....
Измените свой пример выше на
<div>
<span>1</span> 3 5 7 9 1 3 5 7 9 1
</div>
и вы заметите, что ширина и высота диапазона различны. Для шрифта размером 20 пикселей на Chrome диапазон составляет 12x22 пикселей, где 20px - высота шрифта, а 2px - для высоты строки.
Теперь, поскольку em и ex здесь бесполезны, возможной стратегией для решения только для CSS было бы
- Создайте элемент, содержащий только a & nbsp;
- Позвольте авторизовать себя
- Поместите свой div внутри и
- Сделайте его в 10 раз большим, чем окружающий элемент.
Мне не удалось это кодировать. Я также сомневаюсь, что это действительно возможно.
Та же логика, однако, может быть реализована в Javascript. Я использую вездесущий 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 in (w * 10 + 1) предназначен для решения проблем округления.