0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>22 мар 2023</li>
2
<ul><li>22 мар 2023</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Всё об одном из самых востребованных инструментов современной вёрстки.</p>
4
</ul><p>Всё об одном из самых востребованных инструментов современной вёрстки.</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5
<p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6
<p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
6
<p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7
<p>Flexbox - это один из основных инструментов для создания адаптивных веб-страниц (наравне с <a>CSS Grid</a>), поэтому вот уже более 10 лет он остаётся мастхэв-технологией для верстальщиков и фронтенд-разработчиков.</p>
7
<p>Flexbox - это один из основных инструментов для создания адаптивных веб-страниц (наравне с <a>CSS Grid</a>), поэтому вот уже более 10 лет он остаётся мастхэв-технологией для верстальщиков и фронтенд-разработчиков.</p>
8
<p>В этой статье мы расскажем о концепциях Flexbox, свойствах flex-контейнеров и flex-элементов и покажем их действие на простых примерах. А также поделимся лайфхаками для работы с Flexbox в Google Chrome и ссылками на бесплатные тренажёры.</p>
8
<p>В этой статье мы расскажем о концепциях Flexbox, свойствах flex-контейнеров и flex-элементов и покажем их действие на простых примерах. А также поделимся лайфхаками для работы с Flexbox в Google Chrome и ссылками на бесплатные тренажёры.</p>
9
<ul><li><a>Что такое Flexbox</a></li>
9
<ul><li><a>Что такое Flexbox</a></li>
10
<li><a>Как превратить элемент во flex-контейнер</a></li>
10
<li><a>Как превратить элемент во flex-контейнер</a></li>
11
<li><a>Свойства Flexbox:</a></li>
11
<li><a>Свойства Flexbox:</a></li>
12
</ul><ul><li><a>flex-direction</a></li>
12
</ul><ul><li><a>flex-direction</a></li>
13
<li><a>flex-wrap</a></li>
13
<li><a>flex-wrap</a></li>
14
<li><a>flex-flow</a></li>
14
<li><a>flex-flow</a></li>
15
<li><a>justify-content</a></li>
15
<li><a>justify-content</a></li>
16
<li><a>align-items</a></li>
16
<li><a>align-items</a></li>
17
<li><a>align-content</a></li>
17
<li><a>align-content</a></li>
18
<li><a>gap</a></li>
18
<li><a>gap</a></li>
19
</ul><ul><li><a>Свойства flex-элементов:</a></li>
19
</ul><ul><li><a>Свойства flex-элементов:</a></li>
20
</ul><ul><li><a>order</a></li>
20
</ul><ul><li><a>order</a></li>
21
<li><a>flex-grow</a></li>
21
<li><a>flex-grow</a></li>
22
<li><a>flex-shrink</a></li>
22
<li><a>flex-shrink</a></li>
23
<li><a>flex-basis</a></li>
23
<li><a>flex-basis</a></li>
24
<li><a>align-self</a></li>
24
<li><a>align-self</a></li>
25
</ul><ul><li><a>Как работать с Flexbox в Google Chrome</a></li>
25
</ul><ul><li><a>Как работать с Flexbox в Google Chrome</a></li>
26
<li><a>Где поупражняться с Flexbox</a></li>
26
<li><a>Где поупражняться с Flexbox</a></li>
27
</ul><p><strong>Flexbox</strong>(от англ. flex - гибкий) - это модуль CSS, который позволяет удобно управлять расположением, порядком, размерами и отступами между элементами веб-страницы. Сайты, свёрстанные "флексами", получаются адаптивными, то есть выглядят хорошо на разных устройствах: ПК, ноутбуках, планшетах и смартфонах.</p>
27
</ul><p><strong>Flexbox</strong>(от англ. flex - гибкий) - это модуль CSS, который позволяет удобно управлять расположением, порядком, размерами и отступами между элементами веб-страницы. Сайты, свёрстанные "флексами", получаются адаптивными, то есть выглядят хорошо на разных устройствах: ПК, ноутбуках, планшетах и смартфонах.</p>
28
<p>До появления Flexbox разработчики верстали веб-страницы с помощью таблиц, CSS-свойств position, float и прочих инструментов, которые на самом деле для этого не предназначены. Например, float определяет, с какой стороны<strong>текст</strong>, а не группа блоков, будет обтекать элемент. Но так как до начала 2010-х других средств не было, разработчикам приходилось прибегать к подобным "костылям".</p>
28
<p>До появления Flexbox разработчики верстали веб-страницы с помощью таблиц, CSS-свойств position, float и прочих инструментов, которые на самом деле для этого не предназначены. Например, float определяет, с какой стороны<strong>текст</strong>, а не группа блоков, будет обтекать элемент. Но так как до начала 2010-х других средств не было, разработчикам приходилось прибегать к подобным "костылям".</p>
29
<p>К счастью, в 2009 году инициативные разработчики решили навсегда избавиться от вёрстки таблицами и позиционирования и создали Flexbox. Сегодня он, как и <a>CSS Grid</a>, является частью стандарта CSS3 и его не нужно подключать отдельно.</p>
29
<p>К счастью, в 2009 году инициативные разработчики решили навсегда избавиться от вёрстки таблицами и позиционирования и создали Flexbox. Сегодня он, как и <a>CSS Grid</a>, является частью стандарта CSS3 и его не нужно подключать отдельно.</p>
30
<p>Перед тем как приступить к вёрстке флексами, стоит познакомиться с составляющими Flexbox и их назначением. Это позволит осмысленно и эффективно использовать возможности инструмента.</p>
30
<p>Перед тем как приступить к вёрстке флексами, стоит познакомиться с составляющими Flexbox и их назначением. Это позволит осмысленно и эффективно использовать возможности инструмента.</p>
31
<p>Во Flexbox есть два вида свойств: одни применяются к flex-контейнеру, другие - к элементам, которые в нём расположены.</p>
31
<p>Во Flexbox есть два вида свойств: одни применяются к flex-контейнеру, другие - к элементам, которые в нём расположены.</p>
32
<p><strong>Flex-контейнер</strong> - это "коробка", в которой хранятся flex-элементы (flex item). Чтобы превратить элемент во flex-контейнер, нужно установить ему свойство display: flex или display: inline-flex.</p>
32
<p><strong>Flex-контейнер</strong> - это "коробка", в которой хранятся flex-элементы (flex item). Чтобы превратить элемент во flex-контейнер, нужно установить ему свойство display: flex или display: inline-flex.</p>
33
<p>Разница между flex и inline-flex в том, что в первом случае контейнер будет занимать всю ширину экрана (как блочный элемент), а во втором - лишь пространство, занимаемое его содержимым.</p>
33
<p>Разница между flex и inline-flex в том, что в первом случае контейнер будет занимать всю ширину экрана (как блочный элемент), а во втором - лишь пространство, занимаемое его содержимым.</p>
34
<p><strong>Flex-элементы (flex items)</strong> - это дочерние элементы flex-контейнера. Мы можем управлять их расположением, размерами и расстоянием между ними.</p>
34
<p><strong>Flex-элементы (flex items)</strong> - это дочерние элементы flex-контейнера. Мы можем управлять их расположением, размерами и расстоянием между ними.</p>
35
<em>Изображение: Skillbox Media</em><p><strong>Главная ось (main axis)</strong> - направление, в котором располагаются flex-элементы.</p>
35
<em>Изображение: Skillbox Media</em><p><strong>Главная ось (main axis)</strong> - направление, в котором располагаются flex-элементы.</p>
36
<p><strong>Поперечная ось (cross axis)</strong>- ось, перпендикулярная главной оси.</p>
36
<p><strong>Поперечная ось (cross axis)</strong>- ось, перпендикулярная главной оси.</p>
37
<p><strong>Обратите внимание:</strong>направление главной и поперечной осей можно изменить с помощью свойства flex-direction (см. ниже).</p>
37
<p><strong>Обратите внимание:</strong>направление главной и поперечной осей можно изменить с помощью свойства flex-direction (см. ниже).</p>
38
<p><strong>Главный размер (main size)</strong> - размер, соответствующий направлению главной оси.</p>
38
<p><strong>Главный размер (main size)</strong> - размер, соответствующий направлению главной оси.</p>
39
<p><strong>Начало главной оси (main start)</strong>- точка, в которой начинается последовательность flex-элементов, расположенных по главной оси.</p>
39
<p><strong>Начало главной оси (main start)</strong>- точка, в которой начинается последовательность flex-элементов, расположенных по главной оси.</p>
40
<p><strong>Конец главной оси (main end)</strong>- точка, в которой заканчивается последовательность flex-элементов, расположенных по главной оси.</p>
40
<p><strong>Конец главной оси (main end)</strong>- точка, в которой заканчивается последовательность flex-элементов, расположенных по главной оси.</p>
41
<p><strong>Поперечный размер (cross size)</strong>- размер, соответствующий поперечной оси.</p>
41
<p><strong>Поперечный размер (cross size)</strong>- размер, соответствующий поперечной оси.</p>
42
<p>Теперь посмотрим, как ведут себя элементы, когда становятся гибкими. В примере ниже контейнер с классом container содержит три пронумерованных блока div.</p>
42
<p>Теперь посмотрим, как ведут себя элементы, когда становятся гибкими. В примере ниже контейнер с классом container содержит три пронумерованных блока div.</p>
43
<p>HTML:</p>
43
<p>HTML:</p>
44
<div class="container"> <div class="inner-div"> <p>1</p> </div> <div class="inner-div"> <p>2</p> </div> <div class="inner-div"> <p>3</p> </div> </div><p>CSS:</p>
44
<div class="container"> <div class="inner-div"> <p>1</p> </div> <div class="inner-div"> <p>2</p> </div> <div class="inner-div"> <p>3</p> </div> </div><p>CSS:</p>
45
p { padding-top: 40px; margin: 0; font-size: 100px; font-family: sans-serif; text-align: center; vertical-align: middle; } .inner-div { height: 200px; width: 400px; margin: 10px; background-color: #096eeb; }<p>Так как блочные элементы занимают всю ширину, то блоки .inner-div располагаются один под другим:</p>
45
p { padding-top: 40px; margin: 0; font-size: 100px; font-family: sans-serif; text-align: center; vertical-align: middle; } .inner-div { height: 200px; width: 400px; margin: 10px; background-color: #096eeb; }<p>Так как блочные элементы занимают всю ширину, то блоки .inner-div располагаются один под другим:</p>
46
<em>Изображение: Skillbox Media</em><p>А теперь назначим родительскому элементу свойство display: flex:</p>
46
<em>Изображение: Skillbox Media</em><p>А теперь назначим родительскому элементу свойство display: flex:</p>
47
.container { display: flex; }<p>Вот как изменится расположение внутренних блоков:</p>
47
.container { display: flex; }<p>Вот как изменится расположение внутренних блоков:</p>
48
<em>Изображение: Skillbox Media</em><p>Магия! Блоки выстроились вдоль главной оси, а их ширина уменьшилась так, чтобы все уместились в одном ряду.</p>
48
<em>Изображение: Skillbox Media</em><p>Магия! Блоки выстроились вдоль главной оси, а их ширина уменьшилась так, чтобы все уместились в одном ряду.</p>
49
<p>Теперь, когда мы умеем превращать обычные блоки во flex-контейнеры, можно изучить каждое свойство Flexbox.</p>
49
<p>Теперь, когда мы умеем превращать обычные блоки во flex-контейнеры, можно изучить каждое свойство Flexbox.</p>
50
<p><strong>flex-direction</strong> определяет направление основной и поперечной осей в контейнере. Оно может принимать четыре значения:</p>
50
<p><strong>flex-direction</strong> определяет направление основной и поперечной осей в контейнере. Оно может принимать четыре значения:</p>
51
<ul><li><strong>row</strong>(по умолчанию) - элементы располагаются в строку, слева направо;</li>
51
<ul><li><strong>row</strong>(по умолчанию) - элементы располагаются в строку, слева направо;</li>
52
<li><strong>row-reverse</strong> - элементы располагаются в строку, справа налево;</li>
52
<li><strong>row-reverse</strong> - элементы располагаются в строку, справа налево;</li>
53
<li><strong>column</strong> - элементы располагаются в столбец, сверху вниз;</li>
53
<li><strong>column</strong> - элементы располагаются в столбец, сверху вниз;</li>
54
<li><strong>column-reverse</strong>- элементы располагаются в столбец, снизу вверх.</li>
54
<li><strong>column-reverse</strong>- элементы располагаются в столбец, снизу вверх.</li>
55
</ul>.container { display: flex; flex-direction: row; /*flex-direction: row-reverse; */ /*flex-direction: column; */ /*flex-direction: column-reverse; */ }<p>На слайдере ниже показано, как действует на расположение элементов каждое значение flex-direction:</p>
55
</ul>.container { display: flex; flex-direction: row; /*flex-direction: row-reverse; */ /*flex-direction: column; */ /*flex-direction: column-reverse; */ }<p>На слайдере ниже показано, как действует на расположение элементов каждое значение flex-direction:</p>
56
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-wrap</strong> определяет, будут ли flex-элементы переноситься на другую строку, если им не хватит места в ряду.</p>
56
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-wrap</strong> определяет, будут ли flex-элементы переноситься на другую строку, если им не хватит места в ряду.</p>
57
<p>Свойство может принимать одно из трёх значений:</p>
57
<p>Свойство может принимать одно из трёх значений:</p>
58
<ul><li><strong>nowrap</strong>(по умолчанию) - элементы не переносятся на новую строку, а сжимаются;</li>
58
<ul><li><strong>nowrap</strong>(по умолчанию) - элементы не переносятся на новую строку, а сжимаются;</li>
59
<li><strong>wrap</strong> - элементы переносятся на новую строку;</li>
59
<li><strong>wrap</strong> - элементы переносятся на новую строку;</li>
60
<li><strong>wrap-reverse</strong> - элементы переносятся на новую строку в обратном порядке.</li>
60
<li><strong>wrap-reverse</strong> - элементы переносятся на новую строку в обратном порядке.</li>
61
</ul><p>Продемонстрируем действие свойства flex-wrap, для наглядности увеличив количество элементов до восьми:</p>
61
</ul><p>Продемонстрируем действие свойства flex-wrap, для наглядности увеличив количество элементов до восьми:</p>
62
.container { display: flex; flex-wrap: nowrap; /*flex-wrap: wrap; */ /* flex-wrap: wrap-reverse; */ }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-flow</strong>объединяет в одно свойство flex-direction и flex-wrap, позволяя задать их значения в одной строке:</p>
62
.container { display: flex; flex-wrap: nowrap; /*flex-wrap: wrap; */ /* flex-wrap: wrap-reverse; */ }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-flow</strong>объединяет в одно свойство flex-direction и flex-wrap, позволяя задать их значения в одной строке:</p>
63
.container { display: flex; flex-flow: row wrap; }<p><strong>Обратите внимание:</strong>при использовании flex-flow важно соблюдать правильный порядок: сначала задать значение для flex-direction, потом для flex-wrap, иначе свойство работать не будет.</p>
63
.container { display: flex; flex-flow: row wrap; }<p><strong>Обратите внимание:</strong>при использовании flex-flow важно соблюдать правильный порядок: сначала задать значение для flex-direction, потом для flex-wrap, иначе свойство работать не будет.</p>
64
<p><strong>justify-content</strong>определяет, как будут распределены элементы вдоль<strong>главной оси</strong>.</p>
64
<p><strong>justify-content</strong>определяет, как будут распределены элементы вдоль<strong>главной оси</strong>.</p>
65
<p>Свойство насчитывает 10 значений, но стабильно во всех браузерах работают следующие:</p>
65
<p>Свойство насчитывает 10 значений, но стабильно во всех браузерах работают следующие:</p>
66
<ul><li><strong>flex-start</strong>(по умолчанию): выравнивает элементы по началу главной оси;</li>
66
<ul><li><strong>flex-start</strong>(по умолчанию): выравнивает элементы по началу главной оси;</li>
67
<li><strong>flex-end:</strong>выравнивает элементы по концу главной оси;</li>
67
<li><strong>flex-end:</strong>выравнивает элементы по концу главной оси;</li>
68
<li><strong>center:</strong>центрирует элементы вдоль главной оси;</li>
68
<li><strong>center:</strong>центрирует элементы вдоль главной оси;</li>
69
<li><strong>space-between:</strong>распределяет элементы по ширине, с одинаковым пространством между ними. Не добавляет отступы между крайними дочерними элементами и границей родителя;</li>
69
<li><strong>space-between:</strong>распределяет элементы по ширине, с одинаковым пространством между ними. Не добавляет отступы между крайними дочерними элементами и границей родителя;</li>
70
<li><strong>space-around:</strong>добавляет пространство<strong>вокруг каждого элемента</strong>;</li>
70
<li><strong>space-around:</strong>добавляет пространство<strong>вокруг каждого элемента</strong>;</li>
71
<li><strong>space-evenly:</strong>добавляет пространство не только между элементами, но и между ними и границей контейнера (см. иллюстрации ниже).</li>
71
<li><strong>space-evenly:</strong>добавляет пространство не только между элементами, но и между ними и границей контейнера (см. иллюстрации ниже).</li>
72
</ul>.container { display: flex; justify-content: flex-start; /* justify-content: flex-end; */ /* justify-content: center; */ /* justify-content: space-between; */ /* justify-content: space-around; */ /* justify-content: space-evenly; */ }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>align-items</strong>выравнивает содержимое контейнера вдоль по поперечной оси.</p>
72
</ul>.container { display: flex; justify-content: flex-start; /* justify-content: flex-end; */ /* justify-content: center; */ /* justify-content: space-between; */ /* justify-content: space-around; */ /* justify-content: space-evenly; */ }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>align-items</strong>выравнивает содержимое контейнера вдоль по поперечной оси.</p>
73
<p>У свойства есть пять возможных значений:</p>
73
<p>У свойства есть пять возможных значений:</p>
74
<ul><li><strong>flex-start:</strong>элементы выравниваются по верхнему краю контейнера;</li>
74
<ul><li><strong>flex-start:</strong>элементы выравниваются по верхнему краю контейнера;</li>
75
<li><strong>flex-end:</strong>элементы выравниваются по нижнему краю контейнера;</li>
75
<li><strong>flex-end:</strong>элементы выравниваются по нижнему краю контейнера;</li>
76
<li><strong>center:</strong>содержимое контейнера выравнивается по центру;</li>
76
<li><strong>center:</strong>содержимое контейнера выравнивается по центру;</li>
77
<li><strong>baseline:</strong>элементы выравниваются по базовой линии текста, который в них содержится;</li>
77
<li><strong>baseline:</strong>элементы выравниваются по базовой линии текста, который в них содержится;</li>
78
<li><strong>stretch:</strong>внутренние элементы растягиваются на всю высоту flex-контейнера.</li>
78
<li><strong>stretch:</strong>внутренние элементы растягиваются на всю высоту flex-контейнера.</li>
79
</ul>.container { display: flex; align-items: stretch; /*align-items: flex-start;*/ /*align-items: flex-end;*/ /*align-items: center;*/ /*align-items: baseline;*/ }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>align-content</strong>действует подобно justify-content - только распределяет элементы относительно поперечной оси и работает с многострочными контейнерами.</p>
79
</ul>.container { display: flex; align-items: stretch; /*align-items: flex-start;*/ /*align-items: flex-end;*/ /*align-items: center;*/ /*align-items: baseline;*/ }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>align-content</strong>действует подобно justify-content - только распределяет элементы относительно поперечной оси и работает с многострочными контейнерами.</p>
80
<p>Сделаем наш контейнер многострочным: установим фиксированную высоту и включим flex-wrap: wrap.</p>
80
<p>Сделаем наш контейнер многострочным: установим фиксированную высоту и включим flex-wrap: wrap.</p>
81
.container { height: 600px; flex-wrap: wrap; display: flex; align-content: flex-start; /* align-content: flex-end; */ /* align-content: center; */ /* align-content: space-between; */ /* align-content: space-around; */ /* align-content: stretch; */ }<p>На слайдах ниже показано, как ведут себя ряды при установке разных значений align-content:</p>
81
.container { height: 600px; flex-wrap: wrap; display: flex; align-content: flex-start; /* align-content: flex-end; */ /* align-content: center; */ /* align-content: space-between; */ /* align-content: space-around; */ /* align-content: stretch; */ }<p>На слайдах ниже показано, как ведут себя ряды при установке разных значений align-content:</p>
82
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>gap</strong> - это разрыв между отдельными элементами, строками или колонками внутри flex-контейнера. Значение по умолчанию - none; задаётся пикселями (px) или процентами.</p>
82
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>gap</strong> - это разрыв между отдельными элементами, строками или колонками внутри flex-контейнера. Значение по умолчанию - none; задаётся пикселями (px) или процентами.</p>
83
<p><strong>Обратите внимание:</strong>разрывы устанавливаются только между элементами, а не между элементами и границами родителя.</p>
83
<p><strong>Обратите внимание:</strong>разрывы устанавливаются только между элементами, а не между элементами и границами родителя.</p>
84
<p>Существует три версии свойства:</p>
84
<p>Существует три версии свойства:</p>
85
<ul><li><strong>row-gap</strong>- устанавливает разрыв между строками;</li>
85
<ul><li><strong>row-gap</strong>- устанавливает разрыв между строками;</li>
86
<li><strong>column-gap</strong>- устанавливает разрыв между колонками;</li>
86
<li><strong>column-gap</strong>- устанавливает разрыв между колонками;</li>
87
<li><strong>gap</strong> - устанавливает разрыв между строками и колонками. При этом, если задать только значение, оно применяется и к строкам, и к колонкам.</li>
87
<li><strong>gap</strong> - устанавливает разрыв между строками и колонками. При этом, если задать только значение, оно применяется и к строкам, и к колонкам.</li>
88
</ul>container { display: flex; gap: 50px; /*row-gap: 50px;*/ /*column-gap: 50px;*/ /*gap: 50px 100px;*/ }<p>Вот как будут располагаться блоки при разных значениях и версиях gap:</p>
88
</ul>container { display: flex; gap: 50px; /*row-gap: 50px;*/ /*column-gap: 50px;*/ /*gap: 50px 100px;*/ }<p>Вот как будут располагаться блоки при разных значениях и версиях gap:</p>
89
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p>Свойства, с которыми мы познакомились в предыдущем разделе, устанавливаются в стилях контейнера и действуют на всё его содержимое. Но во Flexbox также можно управлять отдельными flex-элементами.</p>
89
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p>Свойства, с которыми мы познакомились в предыдущем разделе, устанавливаются в стилях контейнера и действуют на всё его содержимое. Но во Flexbox также можно управлять отдельными flex-элементами.</p>
90
<p><strong>order</strong>устанавливает порядок расположения элементов во flex-контейнере относительно друг друга.</p>
90
<p><strong>order</strong>устанавливает порядок расположения элементов во flex-контейнере относительно друг друга.</p>
91
<p>В качестве значения order принимает любое целое число: чем оно меньше, тем ближе к началу главной оси будет расположен элемент. По умолчанию у каждого элемента значение order равно 0.</p>
91
<p>В качестве значения order принимает любое целое число: чем оно меньше, тем ближе к началу главной оси будет расположен элемент. По умолчанию у каждого элемента значение order равно 0.</p>
92
<p>HTML:</p>
92
<p>HTML:</p>
93
<div class="container container_view"> <div class="inner-div item-1"> <p>1</p> </div> <div class="inner-div item-2"> <p>2</p> </div> <div class="inner-div item-3"> <p>3</p> </div> </div><p>CSS:</p>
93
<div class="container container_view"> <div class="inner-div item-1"> <p>1</p> </div> <div class="inner-div item-2"> <p>2</p> </div> <div class="inner-div item-3"> <p>3</p> </div> </div><p>CSS:</p>
94
.container { display: flex; } .item-1 { order: 2; } .item-2 { order: 1; } .item-3 { order: 3; }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-grow</strong>позволяет указать, какую долю свободного пространства во flex-контейнере может занимать элемент, или, другими словами, в какой степени он может "расти" вдоль главной оси. В качестве значения можно задать любое неотрицательное число, по умолчанию это 0.</p>
94
.container { display: flex; } .item-1 { order: 2; } .item-2 { order: 1; } .item-3 { order: 3; }<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-grow</strong>позволяет указать, какую долю свободного пространства во flex-контейнере может занимать элемент, или, другими словами, в какой степени он может "расти" вдоль главной оси. В качестве значения можно задать любое неотрицательное число, по умолчанию это 0.</p>
95
<p>Когда для всех элементов установлено значение flex-grow:1, пространство между ними распределено равномерно. Если же какому-то элементу задать flex-grow: 2, то он вырастет в два раза относительно остальных. При изменении размеров экрана пропорция между элементами сохранится.</p>
95
<p>Когда для всех элементов установлено значение flex-grow:1, пространство между ними распределено равномерно. Если же какому-то элементу задать flex-grow: 2, то он вырастет в два раза относительно остальных. При изменении размеров экрана пропорция между элементами сохранится.</p>
96
<p>CSS:</p>
96
<p>CSS:</p>
97
.container { display: flex; } .item-1 { flex-grow: 0; } .item-2 { flex-grow: 0; } .item-3 { flex-grow: 0; }<p>Вот как это будет выглядеть:</p>
97
.container { display: flex; } .item-1 { flex-grow: 0; } .item-2 { flex-grow: 0; } .item-3 { flex-grow: 0; }<p>Вот как это будет выглядеть:</p>
98
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-shrink</strong>, в противоположность flex-grow, позволяет указать, насколько сильно элемент должен сжиматься, если суммарная ширина элементов превышает размер контейнера. Значение может быть любым положительным числом.</p>
98
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-shrink</strong>, в противоположность flex-grow, позволяет указать, насколько сильно элемент должен сжиматься, если суммарная ширина элементов превышает размер контейнера. Значение может быть любым положительным числом.</p>
99
<p>По умолчанию у всех дочерних элементов устанавливается значение этого свойства 1. Элементы с ненулевым значением flex-shrink будут сжиматься, насколько это возможно, с учётом значений flex-shrink других элементов.</p>
99
<p>По умолчанию у всех дочерних элементов устанавливается значение этого свойства 1. Элементы с ненулевым значением flex-shrink будут сжиматься, насколько это возможно, с учётом значений flex-shrink других элементов.</p>
100
<p>CSS:</p>
100
<p>CSS:</p>
101
.container { display: flex; } .item-1 { flex-shrink: 1; /*flex-shrink: 2;*/ /*flex-shrink: 3;*/ } .item-2 { flex-shrink: 2; /*flex-shrink: 2;*/ } .item-3 { flex-shrink: 1; }<p>Вот как это будет выглядеть в браузере:</p>
101
.container { display: flex; } .item-1 { flex-shrink: 1; /*flex-shrink: 2;*/ /*flex-shrink: 3;*/ } .item-2 { flex-shrink: 2; /*flex-shrink: 2;*/ } .item-3 { flex-shrink: 1; }<p>Вот как это будет выглядеть в браузере:</p>
102
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-basis</strong>задаёт размер элемента по главной оси, перед тем как будет распределено оставшееся пространство.</p>
102
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p><strong>flex-basis</strong>задаёт размер элемента по главной оси, перед тем как будет распределено оставшееся пространство.</p>
103
<p>Параметр можно задать в пикселях, в процентах или с помощью ключевых слов:</p>
103
<p>Параметр можно задать в пикселях, в процентах или с помощью ключевых слов:</p>
104
<ul><li><strong>auto</strong>(по умолчанию) - в зависимости от значения flex-direction примет значение свойства width или height. Если же соответствующее свойство тоже установлено в auto, то элемент примет размер содержимого;</li>
104
<ul><li><strong>auto</strong>(по умолчанию) - в зависимости от значения flex-direction примет значение свойства width или height. Если же соответствующее свойство тоже установлено в auto, то элемент примет размер содержимого;</li>
105
<li><strong>max-content</strong>- устанавливает предпочтительную ширину;</li>
105
<li><strong>max-content</strong>- устанавливает предпочтительную ширину;</li>
106
<li><strong>min-content</strong> - устанавливает минимальную ширину;</li>
106
<li><strong>min-content</strong> - устанавливает минимальную ширину;</li>
107
<li><strong>fit-content</strong> - устанавливает максимально возможный размер элемента, ограниченный значениями max-content и min-content.</li>
107
<li><strong>fit-content</strong> - устанавливает максимально возможный размер элемента, ограниченный значениями max-content и min-content.</li>
108
</ul><p><strong>Обратите внимание:</strong>flex-basis действует подобно свойству width, только имеет более высокий приоритет. Поэтому если для элемента будут заданы значения обоих свойств, то width будет игнорироваться.</p>
108
</ul><p><strong>Обратите внимание:</strong>flex-basis действует подобно свойству width, только имеет более высокий приоритет. Поэтому если для элемента будут заданы значения обоих свойств, то width будет игнорироваться.</p>
109
<p><strong>align-self</strong>устанавливает выравнивание отдельного flex-элемента вдоль поперечной оси, переопределяя значение свойства align-items.</p>
109
<p><strong>align-self</strong>устанавливает выравнивание отдельного flex-элемента вдоль поперечной оси, переопределяя значение свойства align-items.</p>
110
<p>Значения align-self задаются для каждого flex-элемента и могут быть следующими:</p>
110
<p>Значения align-self задаются для каждого flex-элемента и могут быть следующими:</p>
111
<ul><li><strong>flex-start</strong> - выравнивает элемент по началу поперечной оси (cross start);</li>
111
<ul><li><strong>flex-start</strong> - выравнивает элемент по началу поперечной оси (cross start);</li>
112
<li><strong>flex-end</strong> - выравнивает элемент по концу поперечной оси (cross end);</li>
112
<li><strong>flex-end</strong> - выравнивает элемент по концу поперечной оси (cross end);</li>
113
<li><strong>center</strong> - выравнивает элемент по центру поперечной оси;</li>
113
<li><strong>center</strong> - выравнивает элемент по центру поперечной оси;</li>
114
<li><strong>stretch</strong>(по умолчанию для flex-элементов) - элементы растягиваются на всю высоту контейнера.</li>
114
<li><strong>stretch</strong>(по умолчанию для flex-элементов) - элементы растягиваются на всю высоту контейнера.</li>
115
</ul><p>На слайдах ниже показано, как ведут себя flex-элементы при разных значениях align-self:</p>
115
</ul><p>На слайдах ниже показано, как ведут себя flex-элементы при разных значениях align-self:</p>
116
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p>Мы познакомились с самыми важными свойствами Flexbox - их хватит, чтобы верстать полноценные веб-страницы и разбираться в чужом HTML- и CSS-коде. Больше технических деталей и дополнительную информацию о технологии можно найти в <a>документации на портале W3C</a>.</p>
116
<em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><em>Изображение: Skillbox Media</em><p>Мы познакомились с самыми важными свойствами Flexbox - их хватит, чтобы верстать полноценные веб-страницы и разбираться в чужом HTML- и CSS-коде. Больше технических деталей и дополнительную информацию о технологии можно найти в <a>документации на портале W3C</a>.</p>
117
<p>В Google Chrome есть фича, которая позволяет экспериментировать со свойствами Flexbox и отлаживать код, не выходя из браузера.</p>
117
<p>В Google Chrome есть фича, которая позволяет экспериментировать со свойствами Flexbox и отлаживать код, не выходя из браузера.</p>
118
<p>Откройте веб-страницу и зайдите в Chrome DevTools (клавиша<strong>F12</strong>). Во вкладке<strong>Elements</strong>рядом с flex-контейнером вы увидите значок<strong>flex</strong>. Если на него нажать, то вокруг каждого блока появится пунктирная граница, а разрывы (gap) будут заштрихованы.</p>
118
<p>Откройте веб-страницу и зайдите в Chrome DevTools (клавиша<strong>F12</strong>). Во вкладке<strong>Elements</strong>рядом с flex-контейнером вы увидите значок<strong>flex</strong>. Если на него нажать, то вокруг каждого блока появится пунктирная граница, а разрывы (gap) будут заштрихованы.</p>
119
<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Цвет границ и штриховки можно изменить во вкладке<strong>Layout</strong>, в разделе<strong>Flexbox</strong>:</p>
119
<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Цвет границ и штриховки можно изменить во вкладке<strong>Layout</strong>, в разделе<strong>Flexbox</strong>:</p>
120
<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Теперь посмотрите на стили контейнера во вкладке<strong>Styles</strong>. Рядом с селектором, в котором задано свойство display: flex, расположен значок<strong>flexbox editor</strong>. Кликните на него, чтобы открыть панель редактора: в ней можно устанавливать значения свойств flex-direction, flex-wrap, align-content, justify-content и align-items.</p>
120
<em>Скриншот: Chrome DevTools / Skillbox Media</em><p>Теперь посмотрите на стили контейнера во вкладке<strong>Styles</strong>. Рядом с селектором, в котором задано свойство display: flex, расположен значок<strong>flexbox editor</strong>. Кликните на него, чтобы открыть панель редактора: в ней можно устанавливать значения свойств flex-direction, flex-wrap, align-content, justify-content и align-items.</p>
121
<em>Источник: Chrome DevTools</em><p>Так вы можете быстро проверить, какое влияние то или иное свойство окажет на веб-страницу, не переключаясь между браузером и редактором кода. Это упростит разработку и немного сэкономит ваше рабочее время.</p>
121
<em>Источник: Chrome DevTools</em><p>Так вы можете быстро проверить, какое влияние то или иное свойство окажет на веб-страницу, не переключаясь между браузером и редактором кода. Это упростит разработку и немного сэкономит ваше рабочее время.</p>
122
<p>Статьи и документация - это, конечно, хорошо, но иногда гораздо проще и быстрее осваивать технологии по играм. Вот три бесплатных тренажёра, которые помогут сделать это буквально за час.</p>
122
<p>Статьи и документация - это, конечно, хорошо, но иногда гораздо проще и быстрее осваивать технологии по играм. Вот три бесплатных тренажёра, которые помогут сделать это буквально за час.</p>
123
<em>Скриншот: Flexbox Froggy / Skillbox Media</em><p>Замечательная минималистичная игра, в которой вам предстоит помочь лягушатам занять свои листья с помощью Flexbox. Каждый уровень сопровождается подсказками и подробной справкой, что позволяет освоить технологию с нуля.</p>
123
<em>Скриншот: Flexbox Froggy / Skillbox Media</em><p>Замечательная минималистичная игра, в которой вам предстоит помочь лягушатам занять свои листья с помощью Flexbox. Каждый уровень сопровождается подсказками и подробной справкой, что позволяет освоить технологию с нуля.</p>
124
<p><a>Перейти на сайт Flexbox Froggy</a></p>
124
<p><a>Перейти на сайт Flexbox Froggy</a></p>
125
<em>Скриншот: Flexbox Defense / Skillbox Media</em><p>А здесь, помимо знания свойств Flexbox, пригодится смекалка: нужно расставить башни так, чтобы они успели убить всех врагов, бегущих по дороге. На последних уровнях будьте готовы поломать голову :)</p>
125
<em>Скриншот: Flexbox Defense / Skillbox Media</em><p>А здесь, помимо знания свойств Flexbox, пригодится смекалка: нужно расставить башни так, чтобы они успели убить всех врагов, бегущих по дороге. На последних уровнях будьте готовы поломать голову :)</p>
126
<p><a>Перейти на сайт Flexbox Defense</a></p>
126
<p><a>Перейти на сайт Flexbox Defense</a></p>
127
<em>Скриншот: Flex Box Adventure / Skillbox Media</em><p>Жил-был король Артур. Он правил своим королевством честно и справедливо, но у него было три злобных брата, которые похитили золото из его замка. Так начинается игра Flex Box Adventure.</p>
127
<em>Скриншот: Flex Box Adventure / Skillbox Media</em><p>Жил-был король Артур. Он правил своим королевством честно и справедливо, но у него было три злобных брата, которые похитили золото из его замка. Так начинается игра Flex Box Adventure.</p>
128
<p>Это, пожалуй, самый весёлый тренажёр по Flexbox. Вам предстоит выполнить 24 миссии, каждая из которых помогает отточить навыки владения инструментом до автоматизма. А если задания покажутся слишком простыми, вы всегда можете повысить уровень сложности.</p>
128
<p>Это, пожалуй, самый весёлый тренажёр по Flexbox. Вам предстоит выполнить 24 миссии, каждая из которых помогает отточить навыки владения инструментом до автоматизма. А если задания покажутся слишком простыми, вы всегда можете повысить уровень сложности.</p>
129
<p><a>Перейти на сайт Flex Box Adventure</a></p>
129
<p><a>Перейти на сайт Flex Box Adventure</a></p>
130
<a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
130
<a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>