Ваш код CSS:
.nav-username {
display: flex;
align-items: center;
}
... применяется к элементу привязки:
<a class='nav-username' href=''>
<img class='profile-picture' src=''>
Username
</a>
Давайте начнем с того, что происходит, когда flex удален .
Элемент привязки по умолчанию является элементом встроенного уровня. Это означает, что он занимает только пространство своего контента. Для встроенных элементов свойство width
и свойство height
не применяются.
Затем учтите, что свойство vertical-align
применяется к элементам встроенного уровня (и элементам ячейки таблицы). Его значение по умолчанию baseline
, что означает, что элементы уровня строки начинаются с выравнивания базовой линии .
Таким образом, без flex layout якорный элемент возвращается к block layout , и вышеуказанные настройки действуют. Для вертикального центрирования текста в этом случае попробуйте vertical-align: middle
.
/* .nav-username {
display: flex;
align-items: center;
} */
.nav-username > * {
vertical-align: middle;
}
jsFiddle demo
Когда flex активен , вот как он проигрывается:
Flex-контейнер преобразует свои дочерние элементы в flex-элементы, которые являются элементами уровня блока, по определению . Это преобразование игнорирует тип элемента. Таким образом, элементы, находящиеся на уровне строки или на уровне блока в блочной компоновке , имеют уровень блока в гибкой компоновке.
Это означает, что свойство vertical-align
игнорируется элементами flex и вместе с объяснением, приведенным выше, объясняет, почему вертикальное центрирование работает при наличии flex, но не при удалении flex.