CSS3: Flexible Box Model

Flexible Box Model – часть спецификации CSS3, которая не получила широкого внимания. Давайте исправим это упущение и рассмотрим как эта возможность может повлиять на дизайн сайтов.

Разные движки по разному обрабатывают это свойство. Ниже представлен один и тот же пример для разных движков:

Как работает свойство

В наше время, сайты часто делятся на несколько колонок. Для этого активно используется свойство float. Однако, при разработки CSS2 не стояло задачи многоколоночной вёрстки. И поэтому верстальщики обычно писали что-нибудь такое:

#left-column {
	float: left;
}
#right-column {
	float: left;
}

Что мы можем сейчас?

Подход к вёрстке с Flexible Box Model слегка отличается. Трудно описать словами простоту, поэтому сразу перейдём к примерам:

<div class="container">
	<div class="blue">
		Какой-то контент.
	</div>
	<div class="blue">
		Ещё одна колонка.
	</div>
	<div class="blue">
		Всего 4 колонки!
	</div>
	<div class="blue">
		Шикарно.
	</div>
</div>

И следующий CSS:

.container {
	width: 1000px;
	display: -webkit-box;
	display: -moz-box;
	-webkit-box-orient: horizontal;
	-moz-box-orient: horizontal;
}
.blue {
	background: #357c96;
	font-weight: bold;
	margin: 2px;
	padding: 20px;
	color: #fff;
	font-family: Arial, sans-serif;
}

 

Вы можете также установить вертикальную ориентацию для такого типа позиционирования.

Следующий шаг

Как вы наверное заметили, на самом деле документ выглядит так:

То есть справа остаётся пустое пространство. Именно в этом месте возможности Flexible Box Model особенно полезны. Если раньше мы мучились с размерами элементов, чтобы заполнить это пространство, то сейчас появилась возможность вытянуть определённые элементы, которые его заполнят.

.flexible {
	-webkit-box-flex: 1;
	-moz-box-flex: 1;
}

Если добавить этот класс к третьей колонке, то получим приблизительно следующее:

То есть оставшееся пространство распределяется между Flex-элементами. Так как в нашем примере только один элемент является Flex-элементом, то всё пространство отдаётся ему. Если у вас будет два таких элемента, со значением 1, то пространство будет распределяться между ними равномерно.

Давайте, к примеру, укажем класс .flexible для первых двух колонок. Получим следующий результат:

Как вы уже поняли, ширины этих колонок соотносятся друг к другу, как 1:1. Таким образом, если например у нас осталось 400 пикселей свободного пространства, то при соотношении 3:1, одному элементу достанется 300 пикселей, а второму – 100.

Направление

Направление – это другой ключевой момент в Flexible Box Model. Давайте слегка изменим наш пример. Допустим мы хотим изменить порядок добавления элементов в контейнер, вместо 1,2,3,4 будет 4,3,2,1. Для этого нам необходимо использовать свойство direction:

-moz-box-direction: reverse;
-webkit-box-direction: reverse;

Кроме того, вы можете использовать свойство box-ordinal-group, чтобы изменять порядок колонок. Проще говоря, элемент с наибольшим значением этого свойства, будет перемещён в конец. Если вы укажете обратное направление, то такой элемент окажется в начале. Пример использования:

-moz-box-ordinal-group: 2;
-webkit-box-ordinal-group: 2;

Выравнивание

Выравнивание элементов происходит очень просто. Для этого существует два свойства: box-align и box-pack.

При горизонтальной ориентации элементов, box-align указывает как они должны быть выровнены по вертикали в котейнере. Аналогично и при вертикальной ориентации. Свойство box-pack – полная противоположность, указывает горизонтальное выравнивание при горизонтальной ориентации, и вертикальное – при вертикальной.

Допустимые значения и краткое описание

Краткое описание свойств:

СвойствоОписание
box-flexПозволяет элементам растягиваться в элементе-контейнере до заполнения свободного пространства.
box-directionНаправление расположения элементов в элементе-контейнере
box-alignУказывает как элементы выровнены в элементе-контейнере.
box-flex-groupСвязывает элементы в группы
box-linesПри обычном поведении, элементы будут располагаться в указанном вами направлении бесконечно. Если указать это свойство, то при нехватке свободного места, элементы будут переносится на новую строку.
box-ordinal-groupПорядок сортировки элементов
box-orientОриентация расположения элементов
box-packВыравнивание элементов вдоль их ориентации

Допустимые значения и значения по умолчанию

СвойствоПо умолчаниюДопустимые значения
box-flex0.0Вещественное число
box-directionnormalnormal | reverse | inherit
box-alignstretchstart | end | center | baseline | stretch
box-flex-group1Целое число
box-linessinglesingle | multiple
box-ordinal-group1Целое число
box-orientinline-axishorizontal | vertical | inline-axis | block-axis | inherit
box-packstartstart | end | center | justify

Значения inline-axis и block-axis для свойства box-orient – соответствуют горизонтальной и вертикальной ориентации.
Источник

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

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.