La question semble être que certaines lettres comme g
, y
, q
, etc. , qui ont une queue vers le bas des pentes, ne permettent pas de centrage vertical. Voici une image pour présenter le problème .
Les personnages dans la boîte verte sont fondamentalement parfaits, car ils n'ont pas de queue vers le bas. Ceux dans la case rouge montrent le problème.
J'aimerais que tous les personnages soient parfaitement centrés verticalement. Dans l'image, les personnages avec une queue vers le bas ne sont pas centrés verticalement. Est-ce possible de rectifier?
Voici le violon qui illustre pleinement le problème .
.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
Sac Chron
la source
la source
v
dansy
et lao
partie dans leg
sont sur la même ligne que le point le plus bas pour les majuscules. Avec votre logique, Å, Ä, Ö seraient alignés tout comme A et O mais ils ne peuvent pas l'être. Si vous voulez faire quelque chose de spécial à ce sujet, vous devez utiliser javascript pour vérifier s'il s'agit d'une petite majuscule, puis pousser le caractère de quelques caractères.Réponses:
Voici ma solution en utilisant JS. L'idée est de transformer l'élément en image afin d'obtenir ses données sous forme de pixel puis de les parcourir pour trouver le haut et le bas de chaque caractère et appliquer une traduction pour fixer l'alignement. Cela fonctionnera avec les propriétés de police dynamique.
Le code n'est pas optimisé mais il met en évidence l'idée principale:
Afficher l'extrait de code
MISE À JOUR
Voici une première optimisation du code:
J'utilise le plugin dom-to-image pour cela.
la source
Â
montré que son centrage n'est pas optimal comme je l'ai commenté dans sa réponse;) Il changera probablement d'avis après avoir vu cela et acceptera le fonctionnement de la policeIl y a peut-être une meilleure réponse, mais il semble que la seule façon de le faire soit d'appliquer manuellement différents styles selon qu'il s'agit de l'un des:
Notez maintenant que, à ma connaissance, la hauteur relative des queues et des tiges, je pense, est définie par la police. Je ne sais pas s'il existe un moyen d'accéder à cela par programmation - vous devrez donc peut-être ajuster ces valeurs avec la police.
Notez également que cette solution ne fonctionnerait pas pour la prise en charge de plusieurs langues - car vous auriez besoin de définir dans quelle catégorie chaque caractère s'inscrit dans des dizaines de jeux de caractères différents.
la source
ÂË
etâë
C'est une situation délicate!
D'après ce que je peux dire, ce sera plus difficile à rendre nativement évolutif (c'est
%
-à- dire ,vw
ou desvh
valeurs au lieu depx
ouem
). Si vous avez besoin de rendre cela joli sur mobile ou tablette, veuillez envisager d'utiliser ma solution avec@media
points arrêt.Ma solution détecte essentiellement s'il s'agit d'un élément en minuscule avec une queue et ajoute une classe pour compenser la hauteur pour compenser la queue.
Dans mes tests, il ne semble pas que les gestionnaires supplémentaires étaient nécessaires pour fonds propres lettres ou minuscules lettres sans queue . N'hésitez pas à me corriger si je me trompe.
Il y a un JSFiddle si vous voulez déconner et changer / tester cette solution.
Faites-moi savoir vos pensées et si j'ai raté quelque chose. Ce serait cool d'avoir une solution finale pour cela car j'ai moi-même eu des problèmes similaires dans le passé!
la source
Vous auriez probablement besoin d'une classe d'aide pour cela, afin que vous puissiez traduire les lettres minuscules plus que les lettres majuscules. Un script simple peut facilement activer automatiquement ces classes d'assistance.
J'espère que cela résout le problème pour vous :)
la source
y
n'est pas centré. Tweek un peu plus!o
ety
vous obtiendrez cela. Les personnages avec des queues créent le problème en premier lieu (mentionné dans le post).