Css выравнивание по вертикали по центру: Все способы вертикального выравнивания в CSS / Хабр

Вертикальное центрирование элементов переменной высоты внутри контейнера с помощью CSS | by Hajime Yamasaki Vukelic

Hajime Yamasaki Vukelic

·

Подписаться

3 минуты чтения

·

18 декабря 2016 г.

Horizont Выравнивание элементов по центру в CSS довольно просто, и это делалось много раз с использованием различных методов. Вертикальное центрирование, с другой стороны, все еще является своего рода искусством. Хотя я не эксперт по браузерам и механизмам рендеринга, тот факт, что страница в большинстве браузеров настроена на вертикальное перемещение, а ширина ограничена областью просмотра, дает нам намек на то, почему это может иметь место.

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

 

Center me!

Что мы будем делать с вышеприведенной разметкой, так это вертикально центрировать дочерний элемент внутри родителя (на самом деле нас не волнует горизонтальное центрирование , но это довольно просто, как вы увидите), и мы не хотим, чтобы дочерний элемент имел фиксированную высоту. Вот CSS:

 .container { 
пробел: nowrap;
} .container:after {
содержимое: '';
дисплей: встроенный блок;
высота: 100%;
вертикальное выравнивание: посередине;
ширина: 0;
}.child {
display: inline-block;
вертикальное выравнивание: посередине;
пробел: обычный;
}

Как это работает. Если вы плохо знакомы с псевдоэлементами, они действуют как элементы, которые добавляются (:после ) или добавляются (:до ) к содержимому элемента, для которого они определены. Добавляя один элемент в контейнер, мы фактически добавляем родственного элемента для дочернего элемента. Когда у двух соседних братьев и сестер vertical-align: middle Правило на них определено, они выравниваются друг с другом по вертикали по середине. Делая псевдоэлемент равным 100% высоты родительского элемента, мы эффективно выравниваем середину дочернего элемента с серединой родительского элемента.

Вы должны знать несколько вещей, прежде чем сходить с ума по этому поводу:

Приведенный выше код не центрируется по горизонтали, но вы можете добиться этого, добавив правило text-align: center к родителю, так как дочерние элементы всегда встроенный или встроенный блок элементов.

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

правило пробела для родительского элемента должно присутствовать, в противном случае псевдоэлемент :after переносится ниже дочернего элемента на небольшой ширине, отменяя вертикальное выравнивание. 9Правило 0039 white-space для дочернего элемента является необязательным, но оно предназначено для сброса эффекта родительского правила white-space .

Задав родительскому элементу либо верхнее, либо нижнее заполнение, либо и то, и другое, вы можете точно настроить выравнивание, поскольку псевдоэлемент занимает 100% вертикального пространства внутри заполнения (также известного как поле содержимого).

Вы можете увидеть этот код в действии на JSFiddle.

В качестве бонуса, если вы используете SASS, вот набор миксинов, которые вы можете использовать для достижения этой настройки:

 @mixin vc-parent() { 
пробел: nowrap;
&:after {
содержимое: '';
дисплей: встроенный блок;
высота: 100%;
вертикальное выравнивание: посередине;
ширина: 0;
}
}@mixin vc-child() {
display: inline-block;
вертикальное выравнивание: посередине;
пробел: обычный;
}

Базовое обучение ZURB | Решение проблем с помощью Flexbox

CSS — это здорово. Ну, большую часть времени. По какой-то причине вертикальное выравнивание содержимого (особенно когда родительский элемент не имеет высоты) — это боль, требующая всевозможных хаков и display: table; ерунда. Он берет то, что кажется простым, и делает его запутанным и болезненным. К счастью, Flexbox решает многие распространенные проблемы макета, с которыми мы сталкиваемся в CSS и плавающих сетках. На этом уроке вы узнаете, как использовать Flexbox для решения вертикального центрирования в ваших проектах.


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

К счастью, у нас есть Flexbox. Flexbox и гибкая сетка Foundation решают многие проблемы макета, и вертикальное выравнивание — одна из них.

Flexbox — это более новая парадигма компоновки/отображения с двумя ключевыми компонентами: Flex-родители (указывается «display: flex») и flex-потомки (настраиваются с помощью свойства flex css).

Краткий обзор преимуществ Flexbox включает:

  • Размер столбцов автоматически изменяется до ширины контейнера
  • Выравнивание по левому краю, середине, правому краю или по ширине
  • Отображать элементы в любом порядке и переворачивать на лету
  • Выровнять по вертикали!

Первая и действительно приятная особенность Flexbox заключается в том, что дочерние элементы элемента display: flex имеют одинаковую высоту. Для этого в Foundation есть компонент Equalizer, который вам не нужен с Flexbox. Это очень удобно для макетов карточного типа. Итак, если у вас есть такая установка:

Все ваши столбцы в этой строке будут иметь одинаковую ширину (если мы не добавим класс размеров, например .small-4) и будут иметь высоту самого высокого столбца.

Итак, давайте сделаем то, ради чего пришли сюда. Вертикальное выравнивание!

Добавьте класс .align-middle к .row для автоматического вертикального выравнивания столбцов в строке.

Больше никакой возни с фиксированной высотой, абсолютным положением или преобразованиями. Посмотрите на результаты:

Отлично. Но иногда нам нужно выровнять по вертикали только один столбец в строке.

Вертикальное выравнивание отдельных столбцов подряд
Вместо этого вы можете выровнять отдельные столбцы в строке. Классы align-self-# дадут столбцу высоту auto и выровняют его. У вас есть несколько вариантов здесь:

  • .align-self-bottom
  • .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *