Гнучка компоновка коробки
З появою гнучкої коробки CSS багато кошмарів веб-дизайнерів 1 були вирішені. Один з найбільш хакітів, вертикальне вирівнювання. Зараз це можливо навіть у невідомих висотах .
"Два десятиліття злому макетів закінчуються. Можливо, не завтра, але незабаром, і на все життя".
- Легендарний CSS Ерік Мейєр на W3Conf 2013
Гнучка коробка (або коротше кажучи, Flexbox) - це нова система компонування, спеціально розроблена для цілей компонування. У специфікації зазначено :
Розкладка Flex поверхнево схожа на компонування блоків. Не вистачає багатьох більш складних властивостей, орієнтованих на текст або документ, які можна використовувати в компонуванні блоків, наприклад, поплавці та стовпці. Натомість він отримує прості та потужні інструменти для розповсюдження простору та вирівнювання вмісту способами, якими часто потрібні веб-сторінки та складні веб-сторінки.
Як це може допомогти в цьому випадку? Ну, подивимось.
Вертикально вирівняні стовпці
Використовуючи Twitter Bootstrap, у нас є .row
деякі .col-*
s. Все, що нам потрібно зробити, - це показати потрібний .row
2 у вигляді гнучких контейнерних коробок, а потім вирівняти всі його гнучкі елементи (стовпці) вертикально за align-items
властивістю.
ПРИКЛАД ТУТ (Будь ласка, читайте коментарі уважно)
<div class="container">
<div class="row vertical-align"> <!--
^-- Additional class -->
<div class="col-xs-6"> ... </div>
<div class="col-xs-6"> ... </div>
</div>
</div>
.vertical-align {
display: flex;
align-items: center;
}
Вихід
Кольорова область відображає коробку з колонкою.
Уточнення на align-items: center
8.3 Вирівнювання поперечної осі: align-items
властивість
Гнучкі елементи можна вирівняти в поперечній осі поточної лінії гнучких контейнерів, аналогічно, justify-content
але в перпендикулярному напрямку. align-items
встановлює вирівнювання за замовчуванням для всіх елементів контейнера flex, включаючи анонімні елементи flex .
align-items: center;
За центральним значенням поле поля гнучких елементів розташовується в центрі поперечної осі в рядку.
Велика оповіщення
Важлива примітка №1: Twitter Bootstrap не вказує width
стовпчиків у зайвих невеликих пристроях, якщо ви не введете один із .col-xs-#
класів у стовпці.
Тому в цій конкретній демонстраційній версії я використовував .col-xs-*
класи для того, щоб стовпці відображалися належним чином у мобільному режимі, оскільки він width
чітко визначає колонку.
Але як альтернативи ви можете вимкнути Flexbox макета шляхом простої зміни display: flex;
до display: block;
в конкретних розмірах екрану. Наприклад:
/* Extra small devices (767px and down) */
@media (max-width: 767px) {
.row.vertical-align {
display: block; /* Turn off the flexible box layout */
}
}
Або ви можете вказати .vertical-align
лише для певних розмірів екрана, як-от так:
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) {
.row.vertical-align {
display: flex;
align-items: center;
}
}
У цьому випадку, я б з @KevinNelson «s підхід .
Важлива примітка №2: Префікси постачальника пропущені через стислість. Синтаксис Flexbox протягом часу змінено. Новий написаний синтаксис не працюватиме на старих версіях веб-браузерів (але не таких старих, як Internet Explorer 9! Flexbox підтримується в Internet Explorer 10 і пізніших версіях).
Це означає, що ви також повинні використовувати display: -webkit-box
в виробничому режимі властивості, встановлені префіксом постачальника, тощо .
Якщо ви натисніть на " Змінити перегляд компільованого перегляду" в демонстраційному вікні , ви побачите попередньо встановлену версію оголошень CSS (завдяки Autoprefixer ).
Стовпи на повну висоту з вертикально вирівняним вмістом
Як ви бачите на попередній демонстраційній версії , стовпці (гнучкі елементи) вже не настільки високі, як їх контейнери (поле контейнера flex), тобто.row
елемент).
Це пов’язано з використанням center
значення для align-items
власності. Значення за замовчуванням таке, stretch
що елементи можуть заповнити всю висоту батьківського елемента.
Щоб виправити це, ви можете також додати display: flex;
до стовпців:
ПРИКЛАД ТУТ (Знову зауважте, коментарі)
.vertical-align {
display: flex;
flex-direction: row;
}
.vertical-align > [class^="col-"],
.vertical-align > [class*=" col-"] {
display: flex;
align-items: center; /* Align the flex-items vertically */
justify-content: center; /* Optional, to align inner flex-items
horizontally within the column */
}
Вихід
Кольорова область відображає коробку з колонкою.
І останнє, але не менш важливе , зауважте, що демонстрації та фрагменти коду тут мають на меті дати вам інше уявлення, запропонувати сучасний підхід для досягнення мети. Будь ласка, пам’ятайте про розділ « Велике сповіщення », якщо ви збираєтесь використовувати цей підхід на реальних веб-сайтах або в додатках.
Для подальшого читання, включаючи підтримку браузера, ці ресурси будуть корисні:
1. Вертикально вирівняйте зображення всередині div з чуткою висотою
2. Краще використовувати додатковий клас, щоб не змінити типовий стандарт Bootstrap у Twitter .row
.
div
, немає тексту всередині, щось на зразок цього jsfiddle.net/corinem/Aj9H9, але в цьому прикладі я не використовую завантажувальний інструмент