Problem wydaje się, że niektóre litery, takie jak g
, y
, q
, itd., Które mają ogon, które schodzą w dół, nie można dopuścić do pionowego centrowania. Oto zdjęcie przedstawiające problem .
Postacie w zielonym polu są w zasadzie idealne, ponieważ nie mają ogona skierowanego w dół. Te w czerwonym polu pokazują problem.
Chciałbym, aby wszystkie postacie były idealnie wyśrodkowane pionowo. Na obrazie postacie z ogonem skierowanym w dół nie są wyśrodkowane pionowo. Czy można to naprawić?
Oto skrzypce, które w pełni demonstrują problem .
.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
Torba chroniona
źródło
źródło
v
iny
io
część wg
są w tym samym wierszu, co najniższy punkt wielkich liter. Zgodnie z twoją logiką, Å, Ę, Ö byłyby zrównane tak jak A i O, ale nie mogą być. Jeśli chcesz zrobić coś wyjątkowego, musisz użyć javascript, aby sprawdzić, czy jest to mała czcionka, a następnie podnieść postać o kilka znaków.Odpowiedzi:
Oto moje rozwiązanie za pomocą JS. Chodzi o to, aby przekształcić element w obraz, aby uzyskać jego dane jako piksel, a następnie przejść przez nie, aby znaleźć górną i dolną część każdego znaku i zastosować tłumaczenie, aby naprawić wyrównanie. Będzie to działać z dynamicznymi właściwościami czcionek.
Kod nie jest zoptymalizowany, ale podkreśla główną ideę:
Pokaż fragment kodu
AKTUALIZACJA
Oto pierwsza optymalizacja kodu:
Używam do tego wtyczki dom-to-image .
źródło
Â
że jego centrowanie nie jest optymalne, jak skomentowałem w jego odpowiedzi;) Prawdopodobnie zmieni zdanie po zobaczeniu tego i zaakceptuje sposób działania czcionkiByć może jest lepsza odpowiedź, ale wydaje się, że jedynym sposobem jest ręczne zastosowanie różnych stylów w zależności od tego, czy jest to jeden z:
Zauważmy teraz, że moim zdaniem względne wysokości ogonów i łodyg są określone czcionką. Nie jestem pewien, czy istnieje sposób programowego dostępu do tego - może być konieczne dostosowanie tych wartości za pomocą czcionki.
Zauważ też, że to rozwiązanie nie działałoby w przypadku obsługi wielu języków - ponieważ musisz zdefiniować, którą kategorię pasuje każdy znak w dziesiątkach różnych zestawów znaków.
źródło
ÂË
iâë
To trudna sytuacja!
Z tego, co mogę powiedzieć, to będzie najtrudniejsza aby natywnie skalę (czyli
%
,vw
czyvh
wartości zamiastpx
lubem
). Jeśli chcesz, aby wyglądał ładnie na telefonie komórkowym lub tablecie, rozważ użycie mojego rozwiązania z@media
punktami przerwania.Moje rozwiązanie zasadniczo wykrywa, czy jest to mały element z ogonem i dodaje klasę do wyrównania wysokości w celu skompensowania ogona.
W moich testach nie wyglądało na to, że do obsługi wielkich lub małych liter bez ogona wymagane są dodatkowe funkcje obsługi . Jeśli się mylę, nie krępuj się i popraw mnie.
Istnieje JSFiddle, jeśli chcesz zadzierać i zmieniać / testować to rozwiązanie.
Daj mi znać, co myślisz, a jeśli coś przeoczyłem. Byłoby fajnie znaleźć ostateczne rozwiązanie tego problemu, ponieważ sam miałem podobne problemy w przeszłości!
źródło
Prawdopodobnie potrzebujesz do tego klasy pomocniczej, aby móc tłumaczyć małe litery bardziej niż wielkie litery. Prosty skrypt może łatwo ustawić te klasy pomocnicze automatycznie.
Mam nadzieję, że to rozwiąże problem dla ciebie :)
źródło
y
nie jest wyśrodkowane. Tweek jeszcze trochę!o
ay
dostaniesz to. Postacie z ogonami tworzą problem na pierwszym miejscu (wspomniane w poście).