Cuando utilizo una fuente de ancho fijo , me gustaría especificar el ancho de un elemento HTML en caracteres .
Se supone que la unidad "em" es el ancho del carácter M, por lo que debería poder usarlo para especificar un ancho. Esto es un ejemplo:
<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>
El resultado no es lo que quería, ya que la línea del navegador se rompe después de la columna 15, no 10:
1 3 5 7 9 1 3 5
7 9 1
(Resultado en Firefox y Chromium, ambos en Ubuntu).
El artículo de Wikipedia dice que un "em" no siempre tiene el ancho de una M, por lo que definitivamente parece que no se puede confiar en la unidad "em" para esto.
Respuestas:
1em es la altura de una M, en lugar del ancho. Lo mismo vale para ex, que es la altura de una x. Hablando en términos más generales, estas son las alturas de las letras mayúsculas y minúsculas.
El ancho es un tema totalmente diferente ...
Cambie su ejemplo anterior a
y notará que el ancho y la altura del tramo son diferentes. Para un tamaño de fuente de 20 px en Chrome, el intervalo es de 12x22 px, donde 20 px es la altura de la fuente y 2 px la altura de la línea.
Ahora, dado que em y ex no sirven de nada aquí, una posible estrategia para una solución solo de CSS sería
Sin embargo, no logré codificar esto. También dudo que realmente sea posible.
Sin embargo, la misma lógica podría implementarse en Javascript. Estoy usando jQuery ubicuo aquí:
El +1 en (w * 10 + 1) es para manejar problemas de redondeo.
fuente
ch
unidadLa unidad que estás buscando es
ch
. Según los documentos de MDN :Es compatible con las versiones actuales de los principales navegadores ( caniuse ).
Ejemplo
fuente
 
o 
. Es funcionalmente equivalente a lach
unidad de CSS, pero aunque no es ampliamente compatible, puede usarse como una solución alternativa en HTML (truco feo, pero debería funcionar).