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

Как сделать элемент flex-контейнером

Чтобы применить flexbox к элементам, нужно сделать их родительский элемент flex-контейнером. Для этого достаточно задать ему свойство display: flex или display: inline-flex. Например, если мы хотим сделать элемент <section> flex-контейнером для его дочерних элементов <article>, мы можем написать такой CSS-код:

css

section {
  display: flex;
}

После этого все дочерние элементы <article> станут flex-элементами и будут подчиняться правилам flexbox. По умолчанию они будут расположены в одну строку по горизонтали, занимая равную ширину и высоту. Вот как это будет выглядеть:

Flex-элементы по умолчанию

Как управлять направлением и порядком flex-элементов

Свойство flex-direction позволяет задать направление главной оси flex-контейнера, по которой будут располагаться flex-элементы. Оно может принимать одно из четырех значений: row, row-reverse, column или column-reverse. Значение row означает, что главная ось будет проходить слева направо, а значение row-reverse - справа налево. Значение column означает, что главная ось будет проходить сверху вниз, а значение column-reverse - снизу вверх. Например, если мы хотим сделать flex-элементы расположенными в колонку, мы можем написать такой CSS-код:

css

section {
  display: flex;
  flex-direction: column;
}

Вот как это будет выглядеть:

Flex-элементы в колонку

Свойство order позволяет задать порядок flex-элементов внутри flex-контейнера. Оно принимает целое число, которое указывает на позицию flex-элемента. По умолчанию все flex-элементы имеют порядок 0, что означает, что они будут расположены в том же порядке, что и в HTML-коде. Чтобы изменить порядок flex-элемента, нужно задать ему свойство order с отрицательным или положительным числом. Чем меньше число, тем раньше flex-элемент будет расположен. Например, если мы хотим сделать первый flex-элемент последним, а последний - первым, мы можем написать такой CSS-код:

css

section {
  display: flex;
}
article:first-child {
order: 1;
}
article:last-child {
order: -1;
}

Flex-элементы с измененным порядком

Как управлять выравниванием и распределением flex-элементов

Свойство justify-content позволяет задать, как flex-элементы распределяют свободное пространство по горизонтали в flex-контейнере. Оно может принимать одно из шести значений: flex-start, flex-end, center, space-between, space-around или space-evenly. Значение flex-start означает, что flex-элементы будут прижаты к началу главной оси, а значение flex-end - к концу главной оси. Значение center означает, что flex-элементы будут выровнены по центру главной оси. Значение space-between означает, что flex-элементы будут равномерно распределены по главной оси, при этом первый flex-элемент будет прижат к началу, а последний - к концу. Значение space-around означает, что flex-элементы будут равномерно распределены по главной оси, при этом у каждого flex-элемента будет одинаковый отступ с обеих сторон. Значение space-evenly означает, что flex-элементы будут равномерно распределены по главной оси, при этом отступ между flex-элементами будет равен отступу от краев flex-контейнера. Например, если мы хотим сделать flex-элементы распределенными по центру, мы можем написать такой CSS-код:

css

section {
  display: flex;
  justify-content: center;
}

Вот как это будет выглядеть:

Flex-элементы с выравниванием по центру

Свойство align-items позволяет задать, как flex-элементы выравниваются по вертикали в flex-контейнере. Оно может принимать одно из шести значений: stretch, flex-start, flex-end, center, baseline или first baseline. Значение stretch означает, что flex-элементы будут растянуты по высоте flex-контейнера, если у них не задано свойство height или align-self. Значение flex-start означает, что flex-элементы будут прижаты к началу побочной оси, а значение flex-end - к концу побочной оси. Значение center означает, что flex-элементы будут выровнены по центру побочной оси. Значение baseline означает, что flex-элементы будут выровнены по базовой линии текста, а значение first baseline - по базовой линии текста первого flex-элемента.

css

section {
  display: flex;
  align-items: center;
}

Вот как это будет выглядеть:

Flex-элементы с выравниванием по центру

Свойство align-self применяется к отдельным flex-элементам и позволяет переопределить значение align-items только для конкретного элемента. Например, если мы хотим сделать первый flex-элемент выровненным к началу побочной оси, а второй - к концу, мы можем написать такой CSS-код:

css

section {
  display: flex;
}
article:first-child {
align-self: flex-start;
}
article:last-child {
align-self: flex-end;
}

Вот как это будет выглядеть:

Flex-элементы с индивидуальным выравниванием

Как управлять гибкостью flex-элементов

Свойство flex позволяет задать гибкость flex-элемента, то есть его способность увеличиваться или уменьшаться в размерах. Оно принимает два значения: первое значение определяет, насколько flex-элемент может увеличиваться, а второе - насколько он может уменьшаться. Значение 0 означает, что flex-элемент не будет изменять свой размер, а значение 1 означает, что он может изменять свой размер в соответствии с доступным свободным пространством. Например, если мы хотим, чтобы первый flex-элемент занимал всю доступную ширину, а второй занимал только свою минимальную ширину, мы можем написать такой CSS-код:

css

section {
display: flex;
}
article:first-child {
flex: 1;
}
article:last-child {
flex: 0;
}

Вот как это будет выглядеть:

Flex-элементы с разной гибкостью

Заключение

CSS Flexbox предоставляет мощные инструменты для создания гибких и адаптивных макетов на веб-страницах. Мы рассмотрели основные концепции, такие как создание flex-контейнера, управление направлением и порядком flex-элементов, выравнивание и распределение элементов, а также гибкость flex-элементов. С помощью этих возможностей вы можете легко создавать разнообразные макеты, адаптирующиеся к разным размерам экранов и устройств.

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

Комментарии (10)


  1. delphinpro
    03.01.2024 12:31
    +1

    картинки потерялись


    1. oleg20091301 Автор
      03.01.2024 12:31
      -3

      Да картинки к сожалению неподгоузиоись но я думаю по подписи более менее понятно какой будет результат


      1. delphinpro
        03.01.2024 12:31
        +6

        Да я-то и по коду вижу, какой будет результат. Только статья наверное ориентирована на новичков.. Что вам мешает сейчас перезалить картинки?


        1. mDoll
          03.01.2024 12:31

          Видимо, всё же что-то мешает. Может быть автор ещё и танцор? ????


  1. Fell-x27
    03.01.2024 12:31
    +1

    Вы, когда переводчиком переводите, учитывайте, что не все нужно переводить. Лэйаут, в данном случае, это не "раскладка" :)


  1. eandr_67
    03.01.2024 12:31
    +5

    Хотелось бы понять, чем данная статья лучше, например, вот этой статьи https://frontender.info/a-guide-to-flexbox/ 2013 года? Я бы понял, если бы в современной статье подробно описывались механизмы, добавленные в flexbox за последние 10 лет. Но нет: тот же space-evenly лишь упомянут, а про gap вообще нет ни слова. Так какой смысл в этих бессистемных обломках информации, лежащей на каждом углу интернета?


  1. Metotron0
    03.01.2024 12:31
    +2

    занимая равную ширину и высоту

    Не будут они равной ширины

    Поддерживаю комментатора выше: без gap что за флексы? Это ж неудобно, если всё через margin отступать.

    Почему-то не указали, что свойство flex — это сокращение для flex-grow, flex-shrink и flex-basis, которые тоже не упомянуты.

    Как давно вы верстаете, в частности флексами?

    Я помню, как на хабре в сессию был наплыв псевдостатей, потому что в каком-то вузе какой-то препод студентам за это прибавлял оценку. Опять началось?


  1. fire_engel
    03.01.2024 12:31

    во-первых, статья скучная. во-вторых, вырезку из документации и я могу опубликовать, да только полезного от этого мало. в-третьих, поздновато о флексах рассказывать в 2024


  1. dopusteam
    03.01.2024 12:31

    Свойство align-items позволяет задать, как flex-элементы выравниваются по вертикали в flex-контейнере

    Вы уверены в этом?


    1. Metotron0
      03.01.2024 12:31

      Поэкспериментирует с flex-direction и подправит.