El problema parece ser que ciertas letras como g
, y
, q
, etc, que tienen una cola que se inclina hacia abajo, no permiten el centrado vertical. Aquí hay una imagen para mostrar el problema .
Los caracteres en el cuadro verde son básicamente perfectos, ya que no tienen cola hacia abajo. Los que están en el cuadro rojo demuestran el problema.
Me gustaría que todos los personajes estén perfectamente centrados verticalmente. En la imagen, los personajes con una cola hacia abajo no están centrados verticalmente. ¿Es esto posible rectificar?
Aquí está el violín que demuestra el problema en su totalidad .
.avatar {
border-radius: 50%;
display: inline-block;
text-align: center;
width: 125px;
height: 125px;
font-size: 60px;
background-color: rgb(81, 75, 93);
font-family: "Segoe UI";
margin-bottom: 10px;
}
.character {
position: relative;
top: 50%;
transform: translateY(-50%);
line-height: 100%;
color: #fff;
}
<div class="avatar">
<div class="character">W</div>
</div>
<div class="avatar">
<div class="character">y</div>
</div>
javascript
html
css
vertical-alignment
Bolsa de crono
fuente
fuente
v
eny
yo
en la parteg
están en la misma línea que el punto más bajo para las letras mayúsculas. Con su lógica, Å, Ä, Ö estarían alineados como A y O, pero no pueden estarlo. Si desea hacer algo especial al respecto, debe usar javascript para verificar si es una pequeña capitalización y luego empujar el carácter hacia arriba unos pocos caracteres.Respuestas:
Aquí está mi solución usando JS. La idea es transformar el elemento en una imagen para obtener sus datos en píxeles y luego recorrerlos para encontrar la parte superior e inferior de cada carácter y aplicar una traducción para corregir la alineación. Esto funcionará con propiedades de fuente dinámica.
El código no está optimizado pero destaca la idea principal:
Mostrar fragmento de código
ACTUALIZAR
Aquí hay una primera optimización del código:
Estoy usando el complemento dom-to-image para esto.
fuente
Â
mostrar que su centrado no es óptimo, como comenté en su respuesta;) Probablemente cambiará de opinión después de ver esto y aceptará la forma en que funciona la fuenteQuizás haya una mejor respuesta, pero parece que la única forma de hacerlo es aplicar manualmente diferentes estilos dependiendo de si es uno de:
Ahora tenga en cuenta que, en mi opinión, las alturas relativas de colas y tallos creo que está definido por la fuente. No estoy seguro de si hay una manera de acceder a eso programáticamente, por lo que es posible que deba ajustar estos valores con la fuente.
Tenga en cuenta también que esta solución no funcionaría para admitir varios idiomas, ya que necesitaría definir en qué categoría encaja cada carácter individual en docenas de conjuntos de caracteres diferentes.
fuente
ÂË
yâë
¡Esta es una situación difícil!
Por lo que puedo decir, esto será más difícil de hacer de forma nativa escalable (es decir
%
,vw
ovh
valores en lugar depx
oem
). Si necesita hacer que esto se vea bonito en dispositivos móviles o tabletas, considere usar mi solución con@media
puntos de interrupción.Mi solución esencialmente detecta si es un elemento en minúscula con una cola y agrega una clase para compensar la altura para compensar la cola.
En mis pruebas, no parecía que era necesario ningún controlador adicional de capital de las letras o minúsculas letras sin cola . Siéntase libre de corregirme si me equivoco.
Hay un JSFiddle si desea perder el tiempo y cambiar / probar esta solución.
Déjame saber tus pensamientos y si me he perdido algo. ¡Sería genial obtener una solución final para esto, ya que he tenido problemas similares en el pasado!
fuente
Probablemente necesite una clase auxiliar para esto, de modo que pueda traducir las letras minúsculas más que las mayúsculas. Un script simple puede poner fácilmente estas clases de ayuda automáticamente.
Espero que esto resuelva el problema para ti :)
fuente
y
no está centrado. Tweek un poco más!o
yy
obtendrá eso. Los caracteres con colas crean el problema en primer lugar (mencionado en la publicación).