Проблема , кажется, что некоторые буквы , как g
, y
, q
и т.д. , которые имеют хвост , что наклоны вниз, не позволяют для вертикального центрирования. Вот изображение, чтобы продемонстрировать проблему .
Символы в зеленом поле в основном идеальны, так как у них нет нисходящего хвоста. Те, кто в красной коробке, демонстрируют проблему.
Я хотел бы, чтобы все персонажи были идеально вертикально отцентрированы. На изображении символы с нисходящим хвостом расположены не по центру. Можно ли это исправить?
Вот скрипка, которая в полной мере демонстрирует проблему .
.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
Chron Bag
источник
источник
v
iny
иo
part вg
той же строке, что и нижняя точка заглавных букв. С вашей логикой, Å, Ä, Ö будут выровнены так же, как A и O, но они не могут быть. Если вы хотите сделать что-то особенное с этим, вам нужно использовать javascript, чтобы проверить, является ли он маленькой заглавной буквой, а затем подтолкнуть персонажа на несколько символов.Ответы:
Вот мое решение с использованием JS. Идея состоит в том, чтобы преобразовать элемент в изображение, чтобы получить его данные в виде пикселей, а затем перебрать их, чтобы найти верх и низ каждого символа и применить перевод, чтобы исправить выравнивание. Это будет работать с динамическими свойствами шрифта.
Код не оптимизирован, но он подчеркивает основную идею:
Показать фрагмент кода
ОБНОВИТЬ
Вот первая оптимизация кода:
Я использую плагин dom-to-image для этого.
источник
Â
чтобы показать , что его центрирование не является оптимальным , поскольку я прокомментировал в своем ответе;) Он, вероятно , изменит свое мнение после того, видя это и принять работы шрифтами путьВозможно, есть лучший ответ, но похоже, что единственный способ - это вручную применить разные стили в зависимости от того, является ли он одним из:
Теперь обратите внимание, что, в моем понимании, относительная высота хвостов и стеблей, я думаю, определяется шрифтом. Я не уверен, есть ли способ получить к нему программный доступ - поэтому вам, возможно, придется скорректировать эти значения шрифтом.
Также обратите внимание, что это решение не будет работать для поддержки нескольких языков - так как вам нужно будет определить, к какой категории подходит каждый отдельный символ в десятках различных наборов символов.
источник
ÂË
иâë
Это сложная ситуация!
Из того, что я могу сказать, это будет наиболее трудно сделать изначально масштабируемым (то есть
%
,vw
илиvh
значения вместоpx
илиem
). Если вам нужно, чтобы это выглядело красиво на мобильном телефоне или планшете, рассмотрите возможность использования моего решения с@media
точками останова.Мое решение по существу обнаруживает, является ли это строчным элементом с хвостом, и добавляет класс для смещения высоты, чтобы компенсировать хвост.
В моем тестировании не оказалось, что для заглавных или строчных букв без хвоста требуются какие-либо дополнительные обработчики . Не стесняйтесь поправлять меня, если я ошибаюсь.
Есть JSFiddle, если вы хотите возиться и менять / тестировать это решение.
Дайте мне знать ваши мысли, и если я что-то пропустил. Было бы здорово получить окончательное решение для этого, поскольку у меня были подобные проблемы в прошлом сам!
источник
Вам, вероятно, понадобится вспомогательный класс для этого, чтобы вы могли переводить строчные буквы больше, чем заглавные. Простой скрипт может легко включить эти вспомогательные классы автоматически.
Надеюсь, что это решит проблему для вас :)
источник
y
не по центру. Еще немного!o
иy
вы получите это. Персонажи с хвостами создают проблему на первом месте (упоминается в посте).