Дополнительно
Flexbox: центрирование по горизонтали и вертикали
Как центрировать div по горизонтали и вертикали внутри контейнера с помощью flexbox. В приведенном ниже примере я хочу, чтобы каждое число располагалось друг под другом (в рядах), которые центрируются по горизонтали.
.flex-container {
padding: 0;
margin: 0;
list-style: none;
display: flex;
align-items: center;
justify-content: center;
}
row {
width: 100%;
}
.flex-item {
background: tomato;
padding: 5px;
width: 200px;
height: 150px;
margin: 10px;
line-height: 150px;
color: white;
font-weight: bold;
font-size: 3em;
text-align: center;
}
<div class="flex-container">
<div class="row">
<span class="flex-item">1</span>
</div>
<div class="row">
<span class="flex-item">2</span>
</div>
<div class="row">
<span class="flex-item">3</span>
</div>
<div class="row">
<span class="flex-item">4</span>
</div>
</div>
579
10
Я думаю, вам нужно что-то вроде следующего.
Смотрите демонстрацию на: http://jsfiddle.net/audetwebdesign/tFscL/
Ваши элементы
.flex-item
должны быть блочного уровня (div
вместоspan
), если вы хотите, чтобы высота и верхняя/нижняя подкладка работали правильно.Кроме того, для
.row
установите ширинуauto
вместо100%
.Ваши свойства
.flex-container
в порядке.Если вы хотите, чтобы
.row
был отцентрирован вертикально в порте просмотра, назначьте 100% высоты дляhtml
иbody
, а также обнулите поляbody
.Обратите внимание, что
.flex-container
нуждается в высоте, чтобы увидеть эффект вертикального выравнивания, иначе контейнер вычисляет минимальную высоту, необходимую для размещения содержимого, которая в данном примере меньше высоты порта просмотра.Сноска:. Свойства
flex-flow
,flex-direction
,flex-wrap
могли бы облегчить реализацию этой конструкции. Я думаю, что контейнер.row
не нужен, если только вы не хотите добавить некоторые стилизации вокруг элементов (фоновое изображение, границы и так далее).Полезный ресурс: http://demo.agektmr.com/flexbox/
Как центрировать элементы по вертикали и горизонтали во Flexbox
Ниже приведены два общих решения для центрирования.
Одно для вертикально выровненных флекс-элементов (
flex-direction: column
), а другое для горизонтально выровненных флекс-элементов (flex-direction: row
).В обоих случаях высота центрированных div может быть переменной, неопределенной, неизвестной, какой угодно. Высота центрированных div'ов не имеет значения.
Вот HTML для обоих случаев:.
CSS (за исключением декоративных стилей)
Когда гибкие элементы укладываются вертикально:
[DEMO](http://jsfiddle.net/8o29y7pd/)
Когда гибкие элементы укладываются горизонтально:
Скорректируйте правило
flex-direction
из приведенного выше кода.[DEMO](http://jsfiddle.net/8o29y7pd/3/)
Центрирование содержимого гибких элементов
Область применения контекста гибкого форматирования ограничена отношениями родитель-ребенок. Потомки flex-контейнера за пределами дочерних элементов не участвуют в flex-верстке и игнорируют flex-свойства. По сути, свойства flex не наследуются за пределами дочерних элементов.
Следовательно, вам всегда нужно применять
display: flex
илиdisplay: inline-flex
к родительскому элементу, чтобы применить flex-свойства к дочернему.Чтобы вертикально и/или горизонтально отцентрировать текст или другое содержимое, содержащееся во flex-элементе, сделайте этот элемент (вложенным) flex-контейнером и повторите правила центрирования.
Более подробная информация здесь: https://stackoverflow.com/q/25311541/3597276
В качестве альтернативы вы можете применить
margin: auto
к элементу содержимого гибкого элемента.Узнайте о полях flex
auto
здесь: Methods for Aligning Flex Items (см. врезку#56).Выравнивание нескольких строк элементов flex
Когда flex-контейнер имеет несколько строк (из-за обертывания), свойство
align-content
будет необходимо для выравнивания по оси.Из спецификации:
Более подробная информация здесь: https://stackoverflow.com/q/42613359/3597276
Поддержка браузеров
Flexbox поддерживается всеми основными браузерами, кроме IE < 10. Некоторые последние версии браузеров, такие как Safari 8 и IE10, требуют префиксы производителя. Для быстрого добавления префиксов используйте Autoprefixer. Более подробная информация в этом ответе.
Решение для центрирования в старых браузерах
Альтернативное решение для центрирования с помощью таблицы CSS и свойств позиционирования см. в этом ответе: https://stackoverflow.com/a/31977476/3597276.
Добавить
в контейнер элемент, что вы хотите в центра. Документация: оправдать-Содержание и выравнивание-товары.
Не забывайте использовать важные атрибуты, специфичные для браузеров:
align-items: center; -->
justify-content: center; -->
Вы можете прочитать эти две ссылки для лучшего понимания flex: http://css-tricks.com/almanac/properties/j/justify-content/ и http://ptb2.me/flexbox/
Удачи.
1 - установить CSS на родительский div, чтобы
дисплей: гибкий;
<БР>2 - установить CSS на родительский div, чтобы флекс-направление: колонка;`<БР> обратите внимание, что все содержимое в этой линии див сверху донизу. Это будет работать лучше, если родитель div содержит только ребенок и ничего больше.<БР>
3 - набор CSS на родительский div, чтобы
оправдать-содержание: центр;
Вот пример того, что CSS будет выглядеть так:
в
в
`Ши: гибкий; за это'контейнер с запасом и:авто; за это's элемент работает идеально.
Примечание: Вы должны установить
ширина
ивысота
, чтобы увидеть эффект.в
в
рентабельность: строительство авто
идеальный с Модель Flexbox. Его централизация по вертикали и горизонтали.в
в
Если вам нужно центрировать текст в ссылке, это будет делать трюк:
в
в
Вы можете воспользоваться
дисплей: шлейф; выровнять элементы: центр; оправдать-содержание: центр;`
на вашем родительского компонента
https://repl.it/repls/TomatoImaginaryInitialization
Используя УСБ+
посмотреть ЗДЕСЬ