[8 урок] Flexbox CSS
Почему Flexbox?
Долгое время единственными надёжными инструментами CSS верстки были такие способы как Float (обтекание) и позиционирование .
С их помощью сложно или невозможно достичь следующих простых требований к макету :
- Вертикального выравнивания блока внутри родителя.
- Оформления всех детей контейнера так, чтобы они распределили между собой доступную ширину/высоту, независимо от того, сколько ширины/высоты доступно.
- Сделать все колонки в макете одинаковой высоты, даже если наполнение в них различно.
Как вы увидите в последующих разделах, flexbox значительно облегчает работу с макетами. Погружаемся!
Display: flex
Для начала нам нужно добавить к блоку с содержимом display:flex;
.container { display: flex; }
Теперь можем поговорить про расположение объектов.
flex-direction
Свойство flex-direction помогает нам определить положение объектов в контейнере.
.container { flex-direction: row | row-reverse | column | column-reverse; }
1. flex-direction: row
- данное свойство задается по стандарту и располагает элементы справа налево, по горизонтали.
2. flex-direction: row-reverse
- главное отличие от row
, это то, что элементы располагаются в обратном порядке, т.е. слева на право.
3. flex-direction: column
- это свойство расположит элементы вертикально, т.е. сверху вниз.
4. flex-direction: column-reverse
- это свойство расположит элементы вертикально и в обратном порядке.
flex-wrap
По умолчанию все элементы flex будут пытаться поместиться в одну строку. Вы можете изменить это и разрешить элементам переноситься по мере необходимости с помощью этого свойства.
.container { flex-wrap: nowrap | wrap | wrap-reverse; }
1. flex-wrap: nowrap
- все элементы будут пытаться поместиться в одну строку
2. flex-wrap: wrap
- элементы будут переноситься по мере необходимости
3. flex-wrap: wrap-reverse
- reverse работает так же как и в предыдущих случаях
flex-flow
Это сокращенное обозначение свойств flex-direction и flex-wrap, т.е. это мы используем для экономии места в css коде.
.container { flex-flow: column wrap; }
justify-content
Cвойство justify-content
определяет, как браузер распределяет пространство между и вокруг элементов контента вдоль главной оси flex контейнера, или вдоль строчной оси grid контейнера.
.container { justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe; }
1. justify-content: flex-start
- элементы располагаются друг за другом и прижимаются к началу контейнера по главной оси.
2. justify-content: flex-end
- элементы располагаются друг за другом и прижимаются к концу контейнера по главной оси, в зависимости от её направления (flex-direction).
3. justify-content: center
- элементы располагаются друг за другом в центре контейнера по главной оси.
4. justify-content: space-between
- Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны. Первый элемент прижат к началу контейнера по главной оси, а последний - к концу.
5. justify-content: space-around
- Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны. Пустые пространства перед первым элементом и после последнего элемента равны половине расстояния между парами соседних элементов.
6. justify-content: space-evenly
- Элементы равномерно распределены вдоль главной оси контейнера. Расстояния между каждой парой соседних элементов равны расстояниям от начала контейнера до первого элемента и от последнего элемента до конца контейнера.
7. justify-content: start
- Элементы располагаются друг за другом и прижимаются к началу контейнера по главной оси.
8. justify-content: end
- Элементы располагаются друг за другом и прижимаются к концу контейнера по главной оси.
9. justify-content: left
- Элементы располагаются друг за другом и прижимаются к левому краю контейнера по главной оси. Если главная ось не горизонтальна, это значение работает как start
.
10. justify-content: right
- Элементы располагаются друг за другом и прижимаются к правому краю контейнера по главной оси. Если главная ось не горизонтальна, это значение работает как start
.
align-items
свойство align-items
выравнивает flex-элементы текущей flex-линии таким же образом, как и justify-content
, но в перпендикулярном направлении.
.container { align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe; }
1. align-items: stretch
- элементы Flex растягиваются, например, поперечный размер поля элемента совпадает с линией при соблюдении ограничений ширины и высоты.
2. align-items: flex-start
- край поперечного начала края гибкого элемента выровнен с краем поперечного начала линии.
3. align-items: flex-end/end/self-end
- элементы располагаются в конце поперечной оси.
4. align-items: flex-start/ start/ self-start
- элементы располагаются в начале оси.
5. align-items: center
- Внешний отступ полей гибкого элемента центрируется в пределах линии на поперечной оси.
6. align-items: baseline
- Все элементы flex выровнены таким образом, что их базовые линии совпадают.
align-content
Свойство align-content
устанавливает распределение пространства между и вокруг элементами контента вдоль поперечной оси элемента типа flexbox
или grid
.
1. start
- элементы расположены вплотную друг к другу, прижавшись к началу контейнера выравнивания по поперечной оси.
2. end
- элементы расположены вплотную друг к другу, прижавшись к концу контейнера выравнивания по поперечной оси.
3. flex-start
элементы расположены вплотную друг к другу, прижавшись к краю контейнера выравнивания в зависимости от поперечной стороны начала (cross-start) контейнера flex.
Это относится только к элементам макета flex. Для элементов, которые не являются потомками flex контейнера, это значение трактуется как start
.
4. flex-end
- элементы расположены вплотную друг к другу, прижавшись к краю контейнера выравнивания в зависимости от поперечной стороны конца (cross-end) контейнера flex.
Это относится только к элементам макета flex. Для элементов, которые не являются потомками flex контейнера, это значение трактуется как end
.
5. center
- элементы расположены вплотную друг к другу в центре контейнера выравнивания по поперечной оси.
6. normal
- элементы расположены в их дефолтной позиции как если бы align-content
не было определено.
7. baselinefirst baseline
last baseline
Определяет участие в выравнивании первой или последней базовой линии: выравнивает базовую линию выравнивания первого или последнего базового набора блока с соответствующей базовой линией в общем первом или последнем базовом наборе всех блоков в его группе совместного использования базовой линии.
Резервное выравнивание для first baseline
равно start
, для last baseline
- end
.
8. space-between
- элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних элементов одинаков. Первый элемент находится на одном уровне с начальной кромкой контейнера выравнивания на поперечной оси, а последний элемент находится на одном уровне с конечной кромкой контейнера выравнивания на поперечной оси.
9. space-around
- элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних предметов одинаков. Пустое пространство до первого и после последнего элемента равно половине пространства между каждой парой смежных элементов.
10. space-evenly
- элементы равномерно распределены внутри контейнера выравнивания вдоль поперечной оси. Интервал между каждой парой соседних элементов, начальным краем и первым элементом, а также конечным краем и последним элементом абсолютно одинаков.
11. stretch
- если объединённый размер элементов вдоль поперечной оси меньше размера контейнера выравнивания, размер любого auto
-размерного элемента увеличивается одинаково (не пропорционально), но при этом соблюдаются ограничения, налагаемые max-height
/max-width
(или эквивалентной функциональности), так что объединённый размер точно заполняет контейнер выравнивания вдоль поперечной оси.
12. safe
- используется вместе с ключевым словом выравнивания. Если выбранное ключевое слово означает, что элемент переполняет контейнер выравнивания, что приводит к потере данных, вместо этого элемент выравнивается, как если бы режим выравнивания был start
.
13. unsafe
- используется вместе с ключевым словом выравнивания. Независимо от относительных размеров элемента и контейнера выравнивания и от того, может ли произойти переполнение, которое приводит к потере данных, данное значение выравнивания учитывается.
Дополнительные материалы для улучшения знаний по Flexbox:
1. http://www.flexboxdefense.com/