Ao usar uma fonte de largura fixa , gostaria de especificar a largura de um elemento HTML em caracteres .
A unidade "em" deve ser a largura do caractere M, então devo ser capaz de usá-la para especificar uma largura. Isto é um exemplo:
<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>
O resultado não é o que eu queria, pois a linha do navegador quebra após a coluna 15, não 10:
1 3 5 7 9 1 3 5
7 9 1
(Resultado no Firefox e Chromium, ambos no Ubuntu.)
O artigo da Wikipedia diz que um "em" nem sempre tem a largura de um M, então definitivamente parece que a unidade "em" não é confiável para isso.
Respostas:
1em é a altura de um M, em vez da largura. O mesmo vale para ex, que é a altura de um x. De modo mais geral, essas são as alturas das letras maiúsculas e minúsculas.
A largura é uma questão totalmente diferente ...
Mude seu exemplo acima para
e você notará que a largura e a altura do vão são diferentes. Para um tamanho de fonte de 20px no Chrome, a extensão é de 12x22 px, onde 20px é a altura da fonte e 2px é a altura da linha.
Agora, uma vez que em e ex não são úteis aqui, uma possível estratégia para uma solução somente CSS seria
No entanto, não consegui codificar isso. Também duvido que seja realmente possível.
A mesma lógica pode, entretanto, ser implementada em Javascript. Estou usando o jQuery onipresente aqui:
O +1 in (w * 10 + 1) é para lidar com problemas de arredondamento.
fonte
ch
unidadeA unidade que você está procurando é
ch
. De acordo com os documentos MDN :É compatível com as versões atuais dos principais navegadores ( caniuse ).
Exemplo
fonte
 
ou 
. É funcionalmente equivalente àch
unidade de CSS, mas embora não seja amplamente suportado, pode ser usado como uma solução alternativa em HTML (hack feio, mas deve funcionar).