Объясняем работу Flexbox-лейаутов с помощью больших разноцветных гифок

Хочешь уверенно проходить IT-интервью?

Готовься к IT-собеседованиям уверенно с AI-тренажёром T1!

Мы понимаем, как сложно подготовиться: стресс, алгоритмы, вопросы, от которых голова идёт кругом. Но с AI тренажёром всё гораздо проще.

💡 Почему Т1 тренажёр — это мастхэв?

  • Получишь настоящую обратную связь: где затык, что подтянуть и как стать лучше
  • Научишься не только решать задачи, но и объяснять своё решение так, чтобы интервьюер сказал: "Вау!".
  • Освоишь все этапы собеседования, от вопросов по алгоритмам до диалога о твоих целях.

Зачем листать миллион туториалов? Просто зайди в Т1 тренажёр, потренируйся и уверенно удиви интервьюеров. Мы не обещаем лёгкой прогулки, но обещаем, что будешь готов!

Реклама. ООО «Смарт Гико», ИНН 7743264341. Erid 2VtzqwP8vqy


В данной статье представлены пять самых распространённых свойств Flexbox-лейаутов, поняв работу которых, вы больше не будете использовать традиционный CSS.

Flexbox-лейауты предостерегают нас от вредных вещей обычного CSS (таких, как вертикальное выравнивание). Итак, Flexbox-лейауты избавляют нас от этого, но освоение данной ментальной модели может быть затруднительно. Поэтому давайте посмотрим, как работают Flexbox-лейауты на наших анимированных примерах, поняв их работу, мы сможем создавать лучшие лейауты.

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

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

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

Пример нашей веб-страницы:

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

Для начала работы с Flexbox-лейаутами нужно превратить обычный контейнер в гибкий контейнер. Сделать это легко:

#container {
display: flex;
}

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

Теперь вы можете начать размещение блоков внутри данного контекста с меньшими трудностями по сравнению с традиционным CSS.

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

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

%image_alt%

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

Как бы то ни было, свойство Flex-direction позволяет нам вращать основную ось:

#container {
display: flex;
flex-direction: column;
}

Интересный CSS эффект, правда?

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

Данное свойство позволяет выравнивать элементы вдоль поперечной оси вместо основной, что позволяет основной оси автоматически меняться на поперечную.

Также существует пара других опций для данного свойства, такие как row-reverse и column-reverse.

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

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

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

В нашем распоряжении имеется пять команд для управления данным свойством:

  1. flex-start
  2. flex-end
  3. center
  4. space-between
  5. space-around

Команды space-between и space-around наименее интуитивно понятны. Space-between предоставляет равное пространство между квадратами, но не между квадратами и контейнером. Space-around обеспечивает каждый квадрат бортами, которые равняются расстоянию между центрами квадратов и контейнером, что вдвое меньше, чем расстояние между двумя квадратами (каждый квадрат жертвует равный не накладывающийся отступ, таким образом удваивая пространство).

Последнее замечание: запомните, что свойство justify-content работает вдоль основной оси, а свойство flex-direction меняет оси местами.

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

При использовании свойства justify-content происходит смещение выравненных элементов.

Свойство justify-content работает с основной осью, а свойство align-items применяется к поперечной оси.

%image_alt%

Давайте установим свойство flex-direction: row таким образом, чтобы наши оси выглядели так же, как на изображении выше.

Свойство align-items имеет 5 команд:

  1. flex-start
  2. flex-end
  3. center
  4. stretch
  5. baseline

Первые три команды точно такие же, как у свойства justify-content, поэтому ничего сложного в них нет. Однако две другие немного отличаются. Свойство stretch полностью растягивает элемент вдоль поперечной оси, а свойство baseline производит выравнивание по нижней границе тега <p>.

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

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

Для команды row квадраты располагаются вдоль основной горизонтальной оси, а для column - вдоль вертикальной поперечной оси. Даже если элементы отцентрированы вдоль вертикальной и горизонтальной оси, они все равно не являются равнозначными!

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

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

#container {
align-items: flex-start;
}
.square#one {
align-self: center;
}
// Только этот квадрат будет отцентрирован.

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

Заключение

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

Другие статьи по теме

Спасибо за прочтение!

Ссылка на оригинальную статью
Перевод: Александр Давыдов

Комментарии

ВАКАНСИИ

Добавить вакансию
Golang-разработчик
Пермь, по итогам собеседования
Hotel Search Team Lead (Golang)
по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ