Se me ocurrió algo simple que me ayudó con un problema de relleno basado en el tamaño de la fuente. Quería compensar un <td>
basado en un prefijo de cadena en la fila anterior. Cliff nota la versión, agrego el texto que representa el desplazamiento deseado en un tramo y lo hago invisible y no seleccionable. Mi solución está aquí:
.hiddenOffset {
opacity: 0;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
cursor: default;
}
<table>
<tr>
<td>NumElements</td>
</tr>
<tr>
<td><span class="hiddenOffset">Num</span>Offset Text</td>
</tr>
</table>
Esto me da la compensación perfecta y el prefijo está oculto y no seleccionable. En mi código real, uso JavaScript puro para especificar la cadena de prefijos, por lo que no está codificado y uso prefix.repeat(n)
para establecer sangrías anidadas.
function processRepeatingGroupInstance(indent, group) {
let prefix = 'No';
let html = '';
for (let i = 0; i < group.length; i++) {
let field = group[i];
if (field.hasOwnProperty('msgvaluedesc'))
html += `<tr><td><span class="hiddenOffset">${prefix.repeat(indent)}</span>${field.name}</td><td class="num">${field.number}</td><td class="value tooltip">${field.msgvaluedesc}<span class="tooltiptext">${field.msgvalue}</span></td></tr>`;
else
html += `<tr><td><span class="hiddenOffset">${prefix.repeat(indent)}</span>${field.name}</td><td class="num">${field.number}</td><td class="value">${field.msgvalue}</td></tr>`;
if (field.hasOwnProperty('repeating_group')) {
for (let j = 0; j < field.repeating_group.length; j++)
html += processRepeatingGroupInstance(indent + 1, field.repeating_group[j]);
}
}
return html;
}
Esto es especialmente extraño, creo, ya que la composición tipográfica pasa mucho tiempo en el tema de interlineado, word-spacing, espaciado entre letras, etc, que todos parecen hacer frente a cómo se colocan las letras verticalmente. Uno pensaría que al menos uno de estos habría evolucionado a una "distancia de ancho real del carácter". – Anthony
Veo en el artículo de Wikipedia que se refiere a que ** en ** se define como la mitad de 1 em, lo que significa que puede usar '0.5em' en lugar de' 1en' (no creo que * en * sea compatible como unidad en css). El artículo dice que * también es tradicionalmente el ancho de una letra minúscula "n" *. – awe
Como nota al margen: la razón por la cual "a nadie parece importarle" el ancho de los elementos tipográficos, es que los caracteres tienen diferentes anchuras dentro de una fuente (a menos que sea una fuente monoespacial). Esto significa que el ancho no es una propiedad común en la fuente, sino en cada carácter dentro de la fuente. – awe