Вертикально выровнять середину изображения по полной высоте шрифта по оси X

В CSS есть свойство vertical-align: middle для строчных элементов, которое выравнивает середину элемента по вертикали до половины высоты x шрифта родительского элемента. Однако это часто ставит изображения немного ниже, чем мне хотелось бы. Есть ли способ вертикально выровнять середину произвольного изображения по полной высоте x шрифта родительского элемента?

Например, установка vertical-align: calc(1ex - 50%) на изображении не работает, поскольку она занимает 50 % высоты родительского элемента, а не 50 % высоты изображения.

Фактический результат vertical-align: middle с использованием изображения :

img {
  vertical-align: middle;
}
<p>This is some text with an <img src = "https://i.sstatic.net/fPdDaN6t.png"> image</p>

Изображение вывода:

Желаемый результат:

Есть ли какие-либо другие ограничения (например, высота изображения), известные заранее в вашем случае использования? Возможно, это поможет. В противном случае я предполагаю, что вы ищете универсальное решение для изображений любой высоты внутри текста любого размера и метрики, чего, насколько мне известно, на самом деле, к сожалению, не существует в надежном и кросс-браузерном виде. (Центрировать некоторые вещи относительно других в CSS по-прежнему сложно.)

myf 01.08.2024 08:41

Пробовали ли вы указать поля и нулевые дополнения (поскольку по умолчанию некоторые элементы имеют это значение), попробуйте использовать проверку консоли вашего браузера.

mohammad 01.08.2024 09:19
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
0
2
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, добавление transform: translatey(-0.5ex); к vertical-align: middle; в некоторой степени помогает:

img {
  vertical-align: middle;
  transform: translatey(-0.5ex);
  width: 20px; /* unrelated */
}

body {
  font-size: 22px;
}
<span style = "font-family: serif; word-spacing: -.5ch;">
x <img height = "10" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "40" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "80" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "120" src = "https://i.sstatic.net/fPdDaN6t.png">
x
</span>

<span style = "font-family: Impact; word-spacing: -.3ch;">
x <img height = "10" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "40" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "80" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "120" src = "https://i.sstatic.net/fPdDaN6t.png">
x
</span>
<span style = "font-family: monospace; word-spacing: -1ch;">
x <img height = "10" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "40" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "80" src = "https://i.sstatic.net/fPdDaN6t.png">
x <img height = "120" src = "https://i.sstatic.net/fPdDaN6t.png">
x
</span>

Предположительно, этот обходной путь с треском провалится для шрифтов с непропорционально высокими нижними элементами и узкой высотой прописи, в результате чего базовая линия сместится необычно высоко в линейном блоке. (Сейчас не могу найти хороший пример, возможно, в CSS «полоса» высоты x все-таки всегда центрирована (?))

На самом деле это работает довольно хорошо. Если у вас несколько строк, это приведет к тому, что изображения будут на 0,5ex выше, но вы можете решить эту проблему, добавив margin-top: 0.5ex; margin-bottom: -0.5ex; к изображению.

v-rob 01.08.2024 20:10

Другие вопросы по теме