Я знаю, що це питання давнє, але я виявив, що для мене це ідеальне рішення.
Я додаю цей css до div, який я хочу відцентрувати:
div:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: middle;
}
Це працює кожного разу, і це чисто.
Редагувати: Просто для завершення, я використовую scss, і у мене є зручний мікс, який я включаю до кожного з батьків, хто є прямими дітьми, яких я хочу мати по вертикалі:
@mixin vertical-align($align: middle) {
&:before {
content: "";
display: inline-block;
height: 100%;
vertical-align: $align;
font-size: 0;
}
& > * {
vertical-align: $align;
font-size: 14px;
}
}
Повне пояснення:
div:beforeдодасть елемент всередині div, але перед будь-яким із його дочірніх елементів. Коли ми використовуємо :beforeабо :afterми повинні використовувати content:декларацію, інакше нічого не трапиться, але для нашої мети вміст може бути порожнім. Тоді ми говоримо, що елемент має бути таким же високим, як його батьківський, доки визначена висота його батьківського елемента, і цей елемент має принаймні вбудований блок. vertical-alignвизначає вертикальне положення самовідношення до батьків, на відміну від того, text-alignщо працює по-іншому.
@mixinДекларація для користувачів Sass і він буде використовуватися , як це:
div {
@include vertical-align(middle)
}