May 25, 2020

[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/

2. https://flexboxfroggy.com/#ru

3.https://mastery.games/flexboxzombies/