Если мы проверим документацию, мы прочтем это:
middle
Выравнивает середину элемента с базовым значением плюс половина x-height родителя.
Таким образом, нам нужно определить эти значения, чтобы понять выравнивание.Если мы ссылаемся на приведенный выше рисунок , мы можем четко видеть базовую линию, а также высоту строки (в нашем случае она равна 100px).Также можно заметить, что середина - это не середина элемента div, а середина текста, определяемая различными значениями (font-family, font-size и т. Д.).
Чтобы использовать простые слова: ваша ссылка на выравнивание - это не div, а текст внутри div.
![](https://i.stack.imgur.com/Ousrm.gif)
Чтобы упростить задачу, оставьте line-height
со значением по умолчанию и определите вместо него font-size
(высота строки будет тогда равна размеру шрифта):
div {
border: 1px solid gray;
font-size:50px;
}
img {
height: 46px;
vertical-align: middle;
}
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>
with a different font-family
<div style="font-family:arial">
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>
Вы можете ясно видеть, что middle
находится далеко от середины div, и если мы изменим font-family
, выравнивание также изменится.
Для выравнивания содержимого внутри div, содержащего текст, лучше использовать flexbox, например:
div {
border: 1px solid gray;
font-size:50px;
display:flex;
align-items:center;
}
img {
height: 46px;
}
<div>
<img src="https://upload.wikimedia.org/wikipedia/commons/0/02/Russula_emetica_117475.jpg"> Foo
</div>