logo1

FlexBox визуализация через GIF

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


В этой главе мы рассмотрим 5 самых распространенных свойств Flexbox. Мы рассмотрим, что они делают, как вы можете их использовать и как будут выглядеть их результаты.

Свойство № 1: Display: Flex

клик для увеличения

У вас есть четыре цветных элемента разных размеров, содержащихся в сером элементе контейнера. На данный момент каждый div имеет значение по умолчанию display: block. Таким образом, каждый квадрат занимает всю ширину своей линии.

Чтобы начать работу с Flexbox, вам нужно превратить ваш контейнер в гибкий контейнер . Это так же просто, как:

		#container {
   		display: flex;
 		}
		
клик для увеличения

Немногое изменилось — ваши div теперь отображаются как inline. Но за кулисами вы сделали что-то мощное. Вы дали своим квадратам нечто, называемое гибким контекстом.

Теперь вы можете начать размещать их в этом контексте, с гораздо меньшими трудностями, чем традиционный CSS.

Свойство №2: Flex Direction

У Flexbox контейнера есть две оси: основная ось и пересекающая ось, которые по умолчанию выглядят следующим образом:

клик для увеличения

По умолчанию элементы располагаются вдоль основной оси, слева направо. Вот почему ваши прямоугольники по умолчанию выстроились по горизонтальной линии после того как вы применили свойство display: flex. Однако flex-direction, позволяет вам вращать основную ось

		#container {
 		display: flex;
  		flex-direction: column;
		}
		
клик для увеличения

Есть одно важное различие, которое следует здесь упомянуть:
flex-direction:column не выравнивает прямоугольники по пересекающей оси вместо основной. Он поворачивает саму основную ось из горизонтального положения в вертикальное.

Свойство №3: Justify Content

Justify-content управляет выравниванием элементов на основной оси. Здесь мы немного углубимся в различия между основной и пересекающей осью. Во-первых, давайте вернёмся к flex-direction: row.

		#container {
  		display: flex;
  		flex-direction: row;
  		justify-content: flex-start;
		}
		

В вашем распоряжении есть пять команд для использования их в justify-content:

клик для увеличения

Space-around и pace-between наименее интуитивны. Space-between делает равное расстояние между прямоугольниками, но не между прямоугольниками и контейнером. Space-around делает одинаковое расстояние с каждой стороны прямоугольника - что собственно означает, что пространство между крайними прямоугольниками и контейнером вдвое меньше, чем между двумя прямоугольниками (каждый из прямоугольников привносит равный, не пересекающийся отступ, что собственно удваивает расстояние). Заключительное замечание: запомните, что justify-content работает вдоль основной оси а flex-direction переключает основную ось.

Свойство №4: Align Items

Если вы освоили justify-content, то align-items покажется вам лёгким ветерком. Как justify-content работает вдоль основной оси, так align-items применяется к пересекающей оси.

клик для увеличения

Давайте сбросим наш flex-direction на row, чтобы наши оси выглядели как на рисунке выше. А теперь, углубимся в команды align-items.

Первые три работают точно также как и в justify-content, поэтому здесь нет ничего особенного. Однако, следующие два немного отличаются. Есть stretch, при котором элементы занимают всю полноту пересекающей оси и baseline, при котором они выравниваются в нижней части тегов параграфа.

клик для увеличения

(Обратите внимание что для align-items: stretch я должен был установить значение высоты прямоугольников на auto. В противном случае свойство height будет переопределятьstretch.) Для baseline следует помнить, что если вы убираете теги параграфа, он выровняет нижнюю часть прямоугольников, например так:

клик для увеличения

Для того чтобы лучше продемонстрировать основную и пересекающую оси, давайте совместим свойства justify-content и align-items, и посмотрим как работает различное центрирование для двух flex-direction команд:

клик для увеличения

С row прямоугольники выстраиваются вдоль горизонтальной основной оси. С column они опускаются вдоль вертикальной основной оси. Даже если прямоугольники расположены по центру в обоих случаях (как по вертикали, так и по горизонтали), они не являются взаимозаменяемыми!

Свойство №5: Align Self

Align-self позволяет вам вручную управлять выравниванием одного конкретного элемента. В основном, он переопределяет свойство align-items для одного прямоугольника. Все возможные значения точно такие же как align-items, хотя по умолчанию стоит auto, который наследуется от свойства align-items контейнера.

	#container {
	 align-items: flex-start;
	}
	.square#one {
	 align-self: center;
	}
	// Only this square will be centered.
	

Давайте посмотрим на то как это выглядит. Применим align-self двум прямоугольникам, а для остальных поставим align-items: center и flex-direction: row.

клик для увеличения

Заключение

Несмотря на то, что мы только поцарапали поверхность Flexbox, этих команд должно быть достаточно для обработки большинства основных выравниваний и вертикального расположения элементов вашего содержимого.