Как выровнять элементы по вертикали css
Свойство align-items также выравнивает элементы, но уже по поперечной оси (cross axis) (при расположении в виде строки по вертикали, при расположении в виде столбца — по горизонтали). Это свойство может принимать следующие значения:
- stretch : значение по умолчанию, при котором flex-элементы растягиваются по всей высоте (при расположении в строку) или по всей ширине (при расположении в столбик) flex-контейнера
- flex-start : элементы выравниваются по верхнему краю (при расположении в строку) или по левому краю (при расположении в столбик) flex-контейнера
- flex-end : элементы выравниваются по нижнему краю (при расположении в строку) или по правому краю (при расположении в столбик) flex-контейнера
- center : элементы выравниваются по центру flex-контейнера
- baseline : элементы выравниваются в соответствии со своей базовой линией
Выравнивание при расположении в строку:
Flexbox в CSS3 .flex-container < display: flex; border:1px #ccc solid; height:5em; >.flex-start < align-items: flex-start; >.flex-end < align-items: flex-end; >.center < align-items: center; >.baseline < align-items: baseline; >.flex-item < text-align:center; font-size: 1em; padding: 1.2em; color: white; >.largest-item < padding-top:2em; >.color1 .color2 .color3 .color4Flex-start
Flex Item 1Flex Item 2Flex Item 3Flex Item 4Flex-end
Flex Item 1Flex Item 2Flex Item 3Flex Item 4Center
Flex Item 1Flex Item 2Flex Item 3Flex Item 4Baseline
Flex Item 1Flex Item 2Flex Item 3Flex Item 4
Аналогично свойство работает при расположении в столбик. Например, изменим стили flex-контейнера следующим образом:
.flex-container

Свойство align-self
Свойство align-self позволяет переопределить значение свойства align-items для одного элемента. Оно может принимать все те же значения плюс значение «auto»:
- auto : значение по умолчанию, при котором элемент получает значение от свойства align-items , которое определено в flex-контейнере. Если в контейнере такой стиль не определен, то применяется значение stretch .
- stretch
- flex-start
- flex-end
- center
- baseline
Flexbox в CSS3 .flex-container < display: flex; border:1px #ccc solid; justify-content: space-between; align-items: stretch; height:12em; >.flex-item < text-align:center; font-size: 1em; padding: 1.2em; color: white; >.item1 .item2 .item3 .item4Align-self
Flex Item 1Flex Item 2Flex Item 3Flex Item 4
Здесь для flex-контейнера задано растяжение по высоте с помощью значения align-items: stretch; . Однако каждый из элементов переопределяет это поведение:
Flexbox justify-content: полное руководство по центрированию
От автора: Flexbox — это популярный модуль макета CSS, который помогает позиционировать элементы HTML на экране. Есть много сценариев использования, когда он может оказаться настоящей находкой; горизонтальное и вертикальное центрирование из их числа. Центрирование Flexbox justify-content решает стандартные проблемы выравнивания, с которыми вы можете столкнуться при работе с традиционной блочной моделью CSS. Это позволяет центрировать элементы внутри их контейнера как по горизонтали, так и по вертикали с помощью всего лишь нескольких строк кода CSS.
Макеты Flexbox на основе рядов и столбцов
Flexbox — это модуль одномерного макета, это означает, что ваши макеты основаны на строках или столбцах. Вы можете установить направление макета, используя свойство flex-direction, которое необходимо использовать во flex-контейнере. Оно может принимать четыре значения: row, row-reverse, column и column-reverse. Вот как на экране выглядят четыре разных направления flex:
Flex-макет на основе рядов (по умолчанию):
display : flex ;
flex-direction : row ;

Реверсивный макет на основе рядов:
display : flex ;
flex-direction : row-reverse ;

Flex-макет на основе столбцов:
display : flex ;
flex-direction : column ;

Реверсивный макет на основе столбцов:
display : flex ;
flex-direction : column-reverse ;

На рисунке выше, вы можете увидеть макеты Flexbox с одной строкой, для которых мы не изменяли значение свойства flex-wrap по умолчанию — Nowrap . Поэтому, если вы хотите отображать элементы в нескольких строках или столбцах, добавьте для flex-контейнера также правило flex-wrap: wrap;.
Как работает центрирование Flexbox?
Фактически, flexbox не использует понятия «горизонтальное» и «вертикальное» центрирование. Вместо этого он работает с основной и поперечной осями, которые на экране выглядят как горизонтальное и вертикальное центрирование. Направление основной и поперечной осей зависит от значения вышеупомянутого свойства flex-direction.
В макетах flexbox на основе рядов (row и row-reverse) основная ось проходит в горизонтальном направлении, а поперечная — в вертикальном. С другой стороны, в макетах flexbox на основе столбцов (column и column-reverse) основная ось проходит вертикально, а поперечная ось — горизонтально. Если вы хотите узнать больше о том, как работают оси flexbox, ознакомьтесь с документацией по Flexbox на MDN.
Когда мы говорим о центрировании flexbox, мы имеем в виду два вида центрирования:
Центрирование вдоль основной оси (также называемой осью блока).
Центрирование вдоль поперечной оси (также называемой линейной осью).
Если вам нужен идеально отцентрированный flex-элемент, вы должны отцентрировать его вдоль обеих осей.
Центрирование вдоль основной оси
Вам необходимо использовать свойство justify-content для центрирования flex-элементов вдоль главной оси. Значением по умолчанию — flex-start, которое выравнивает все элементы внутри контейнера flex по началу главной оси. Если вы хотите центрировать элементы, вам нужно использовать его со значением center.
В случае макетов на основе строк следующий код CSS центрирует элементы по горизонтали (так как здесь, главная ось также проходит горизонтально):
Как вертикальное выравнивание элементов в div?
У меня есть div с двумя изображениями и h1 . Все они должны быть вертикально выровнены внутри div, рядом друг с другом.
Одно из изображений должно быть absolute расположено внутри div.
Какой CSS необходим для работы всех распространенных браузеров?
id="header"> src=".." > testing. src=". ">
Я составил список всех способов выравнивания по вертикали .. Я собираюсь оставить его здесь: jsfiddle.net/techsin/FAwku/1
Вот два простых метода для центрирования элемента внутри div, по вертикали, по горизонтали или в обоих (чистый CSS): stackoverflow.com/a/31977476/3597276
margin-top: auto и margin-bottom: auto (Работает для многих случаев).
Вау, эта проблема популярна. Это основано на недоразумении в vertical-align собственности. Эта превосходная статья объясняет это:
«Как центрировать в CSS» — это отличный веб-инструмент, который помогает найти необходимые атрибуты центрирования CSS для различных ситуаций.
В двух словах (и для предотвращения гниения ссылок) :
- Встроенные элементы (и только встроенные элементы) могут быть выровнены по вертикали в их контексте с помощью vertical-align: middle . Однако «контекст» — это не вся высота родительского контейнера, а высота текстовой строки, в которой они находятся. Пример jsfiddle
- Для блочных элементов вертикальное выравнивание сложнее и сильно зависит от конкретной ситуации:
- Если внутренний элемент может иметь фиксированную высоту , вы можете сделать свою позицию absolute и указать его height , margin-top и top положение. пример jsfiddle
- Если центрированный элемент состоит из одной строкииего родительская высота фиксирована, вы можете просто установить контейнер line-height для заполнения его высоты. Этот метод довольно универсален по моему опыту. пример jsfiddle
- . есть еще такие особые случаи.
Проблема с «действительными» решениями (поэтому не с vertical-align: middle ) заключается в том, что вам нужно указать фиксированную высоту. Не очень возможно для адаптивного веб-дизайна .
У меня была такая структура:
My Text div> Сработало для меня, установите свойство lineHeight, используя то же значение, что и в свойстве div height: ‘## px’ (## потому что это значение динамично в моем случае) спасибоЭто также работает с inline-block и table-cell элементами. Если у вас возникли проблемы с этим, попробуйте настроить line-height элемент контейнера (т.е. контекст), поскольку он используется в vertical-align вычислениях линейного блока.
css-tricks.com/centering-css-complete-guide
Этот инструмент (howtocenterincsss.com) очень хорош, потому что он работал прямо из коробки в моем существующем CSS! Это супер редко. Вспомните старые времена, когда вам приходилось копировать целые таблицы стилей из какого-то примера, иногда даже из примера HTML, а затем удалять и переименовывать элементы один за другим, пока это не то, что мне было нужно. Не дело для этого сайта!
Теперь, когда поддержка flexbox увеличивается, этот CSS, примененный к содержащему элементу, будет вертикально центрировать содержащийся элемент:
.container display: flex; align-items: center; >Используйте префиксную версию, если вам также нужно ориентироваться на Explorer 10 и старые (<4.4) браузеры Android:
.container display: -ms-flexbox; display: -webkit-flex; display: flex; -ms-flex-align: center; -webkit-align-items: center; -webkit-box-align: center; align-items: center; >Хорошее решение, спасибо. Можете ли вы предложить, как заставить flexbox отображать горизонтальную полосу прокрутки, если внутренний элемент больше контейнера? (Я пытаюсь сделать внутренний элемент масштабируемым / прокручиваемым внутри контейнера, как canvas в powerpoint)? Это вообще возможно?
@YazidErman это решение зависит от flexbox, так что нет, только поддержка IE 10 и выше или любой другой современный браузер caniuse.com/#search=flexbox Flexbox отлично подходит для тех случаев, когда он поддерживается, но не везде. Отображаемая таблица и ячейка таблицы, вероятно, являются действительно лучшим решением, контейнер просто должен быть таблицей, центрируемый элемент оборачивается элементом с ячейкой отображаемой таблицы, а затем может просто центрироваться, как указывают некоторые другие ответы.
Почему мне было так трудно найти>.
Полезные CSS трюки руководство по flexbox, а затем посмотрите на align-items раздел
В 2020 году мы можем использовать flexbox caniuse.com/#feat=flexboxЯ использовал этот очень простой код:
class="ext-box"> class="int-box"> Some txt bla bla bladiv.ext-box display: table; width:100%;> div.int-box display: table-cell; vertical-align: middle; >Очевидно, что, используете ли вы .class или #id , результат не изменится.
Вот полный пример всех девяти возможностей выравнивания (верх-середина-низ и лево-центр-право): jsfiddle.net/webMac/0swk9hk5
В 2020 году мы можем использовать flexbox caniuse.com/#feat=flexbox
отлично работает для меняЭто сработало для меня:
.vcontainer min-height: 10em; display: table-cell; vertical-align: middle; >Значит, это больше не «блочный» элемент?
Тогда, если вы хотите выровнять по горизонтали margin : 0 auto , это не сработает из-за display: table-cell
.outer display: flex; align-items: center; justify-content: center; >Я думаю, что это решение является самым быстрым и простым для понимания. Возможно, это потому, что я не был достаточно терпелив, чтобы ухватиться за выбранный ответ. Flexbox все вещи!
Дополнение justify-content: center исправило мое отсутствие горизонтального центрирования
Техника от моего друга:
style="height:100px; border:1px solid;"> style="border:1px dotted;">I'm vertically centered.div:before content:" "; display:inline-block; height:100%; vertical-align:middle;> div p display:inline-block;>этот метод более подробно описан здесь: css-tricks.com/centering-in-the-unknown
Чтобы расположить элементы блока по центру (работает в IE9 и выше), требуется оболочка div :
.vcontainer position: relative; top: 50%; transform: translateY(-50%); -webkit-transform: translateY(-50%); >Этот метод может сделать элементы размытыми из-за того, что элемент размещен на «полупикселе». Решение для этого состоит в том, чтобы установить перспективу элемента. transform: перспектива (1px) translateY (-50%);
Все они должны быть вертикально выровнены внутри div
Выровняли как ? Вершины изображений выровнены по верху текста?
Одно из изображений должно быть в абсолютном положении внутри div.
Абсолютно позиционируется относительно DIV? Возможно, вы могли бы набросать то, что вы ищете .
fd описал шаги для абсолютного позиционирования, а также для настройки отображения H1 элемента таким образом, чтобы изображения отображались внутри него. К этому я добавлю, что вы можете выровнять изображения, используя vertical-align стиль:
#header h1 #header img. это объединит заголовок и изображения с выровненными верхними краями. Существуют другие варианты выравнивания; обратитесь к документации . Также может оказаться полезным сбросить DIV и переместить изображения внутри H1 элемента — это обеспечивает семантическую ценность для контейнера и устраняет необходимость настраивать отображение H1 :
id=header"> src=".." > testing. src=". ">Используйте эту формулу, и она будет работать всегда без трещин:
#outer height: 400px; overflow: hidden; position: relative;> #outer[id] display: table; position: static;> #middle position: absolute; top: 50%;> /* For explorer only*/ #middle[id] display: table-cell; vertical-align: middle; width: 100%;> #inner position: relative; top: -50%> /* For explorer only */ /* Optional: #inner[id] */id="outer"> id="middle"> id="inner"> any text any height any content, for example generated from DB everything is vertically centeredВыполнить фрагмент кода Скрыть результаты
Я никогда не видел в css такого рода селектор «#outer [id]». Что это должно делать? Что если у меня будет класс вместо идентификатора?
Почти все методы должны указывать высоту, но часто у нас нет никаких высот.
Итак, вот 3-х строчный трюк CSS3, который не требует знать высоту..element position: relative; top: 50%; transform: translateY(-50%); >Это поддерживается даже в IE9.
с его префиксами поставщика:
.element position: relative; top: 50%; -webkit-transform: translateY(-50%); -ms-transform: translateY(-50%); transform: translateY(-50%); >но это, кажется, работает только тогда, когда высота родительского элемента фиксирована. свойство top с процентным значением работает только в контейнере с фиксированной высотой, верно?
Да, это работает только в некоторых случаях, позже у меня были проблемы с этими методами . Дело в том, чтобы иметь как можно больше возможностей, и как только вам понадобится один, вы тестируете их все, пока не получите хороший, потому что все методы есть вещи, которые не работают в конкретном случае .
Двумя способами вы можете выровнять элементы по вертикали и по горизонтали
- Bootstrap 4
- CSS3

1. Bootstrap 4.3.X
для вертикального выравнивания: d-flex align-items-center
для горизонтального выравнивания: d-flex justify-content-center
.container height: 180px; width:100%; >href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet"/> class="d-flex align-items-center justify-content-center bg-info container"> class="bg-light p-2">I am in CenterВыполнить фрагмент кода Скрыть результаты
2. CSS3
.container display: flex; align-items: center; // verticall center justify-content: center; // horizontally center background-color: #17a2b8; height: 180px; width:100%; > .child background-color: #f8f9fa; padding: 0.5rem; >class="container"> class="child">I am in CenterВыполнить фрагмент кода Скрыть результаты
Оба способа в основном одинаковы, так как Bootstrap использует одинаковые атрибуты flex в своих классах.
Бутстрап не волшебство. На него распространяются те же ограничения CSS, которые влияют на всех. Это просто скрывает то, что делает от avg. пользователь.
Мой трюк заключается в том, чтобы поместить в div таблицу с 1 строкой и 1 столбцом, установить 100% ширины и высоты, а также свойство vertical-align: middle.
style="width:100%; height:100%;"> style="vertical-align:middle;"> BUTTON TEXTЭто кажется лучшим способом избежать царапин на голове. Я все еще не понимаю, почему у CSS нет стандарта вертикального выравнивания.
# 3 способа сделать дочерний центр центром в родительском элементе div

- Абсолютный метод позиционирования
- Метод Flexbox
- Преобразовать / Перевести Методдемонстрация
/* 1st way */ .parent1 background: darkcyan; width: 200px; height: 200px; position: relative; > .child1 background: white; height: 30px; width: 30px; position: absolute; top: 50%; left: 50%; margin: -15px; > /* 2nd way */ .parent2 display: flex; justify-content: center; align-items: center; background: darkcyan; height: 200px; width: 200px; > .child2 background: white; height: 30px; width: 30px; > /* 3rd way */ .parent3 position: relative; height: 200px; width: 200px; background: darkcyan; > .child3 background: white; height: 30px; width: 30px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); >class="parent1"> class="child1">






Рис. 5. Управление многострочностью с помощью свойства flex-wrap для LTR-языков
Рис. 7. Управление свободным пространством в панели навигации с помощью flex-grow
Рис. 8. Сужение flex-элементов в строке
Рис. 9. Выравнивание элементов и распределение свободного пространства с помощью свойства justify-content
Рис. 10. Выравнивание элементов в контейнере по вертикали
Рис. 11. Выравнивание отдельных flex-элементов
Рис. 12. Многострочное выравнивание flex-элементов