Узнайте, как освоить CSS flexbox, от основ до продвинутых методов. Совершенствуйте свои навыки веб-верстки и с легкостью создавайте адаптивный дизайн.

Введение

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

Если вы любите учиться, я предлагаю вам попробовать эту игру, основанную на flexbox. Вы быстро поймете весь модуль.



В этом руководстве вы узнаете о следующих свойствах Flexbox и соответствующих примерах кода:

Свойства Flexbox для родительского элемента (контейнера)

отображать

Определяет контейнер как гибкий контейнер и позволяет применять свойства Flexbox к его дочерним элементам.

.container {
   display: flex; /* or inline-flex */
 }

flex-направление

Устанавливает направление, в котором гибкие элементы размещаются внутри контейнера. Варианты включают строку, строку-реверс, столбец и столбец-реверс.

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}

гибкая упаковка

Определяет, должны ли гибкие элементы переноситься или нет, когда на главной оси недостаточно места. Опции включают в себя nowrap, wrap и wrap-reverse.

  • nowrap (по умолчанию): все гибкие элементы будут в одной строке.
  • wrap: flex-элементы будут переноситься на несколько строк сверху вниз.
  • wrap-reverse: flex-элементы переносятся на несколько строк снизу вверх.
.container {
  flex-wrap: nowrap | wrap | wrap-reverse;
}

гибкий поток

Сокращение для одновременной установки flex-direction и flex-wrap.

.container {
  flex-flow: column wrap;
}

выравнивание содержания

justify-content — это свойство CSS Flexbox, которое выравнивает flex-элементы по главной оси контейнера. Он имеет шесть возможных значений:

  1. flex-start: это значение выравнивает элементы по началу контейнера. Если главная ось контейнера горизонтальна, элементы будут выровнены по левому краю. Если главная ось вертикальна, элементы будут выровнены по верхнему краю.
  2. flex-end: это значение выравнивает элементы по краю контейнера. Если главная ось контейнера горизонтальна, элементы будут выровнены по правому краю. Если главная ось вертикальна, элементы будут выровнены по нижнему краю.
  3. center: это значение центрирует элементы вдоль главной оси контейнера. Если главная ось горизонтальна, элементы будут центрированы горизонтально. Если главная ось вертикальна, элементы будут центрированы по вертикали.
  4. space-between: это значение равномерно распределяет элементы вдоль главной оси контейнера, при этом первый элемент выравнивается по началу, а последний — по концу. Остальные элементы равномерно распределяются между ними.
  5. stretch: это значение растягивает элементы, чтобы заполнить контейнер вдоль главной оси. Это означает, что элементы будут расширены или сжаты, чтобы заполнить доступное пространство.
  6. space-around: это значение равномерно распределяет элементы вдоль главной оси контейнера с одинаковым расстоянием между ними. В начале и в конце контейнера также есть интервал, поэтому элементы не выровнены по краям.
.container {
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch
}

выравнивание элементов

Свойство align-items используется для вертикального выравнивания flex-элементов внутри контейнера. Вот описания для каждого значения:

  • flex-start: это значение выравнивает flex-элементы по верхней части контейнера. Элементы выравниваются на основе края поперечного поля гибких элементов.
  • flex-end: это значение выравнивает flex-элементы по нижней части контейнера. Элементы выравниваются на основе края поперечного поля гибких элементов.
  • center: это значение выравнивает гибкие элементы по центру контейнера. Элементы выравниваются на основе середины краев начального и конечного полей гибких элементов.
  • stretch: это значение растягивает гибкие элементы, чтобы заполнить контейнер по вертикали. Элементы растягиваются, чтобы соответствовать высоте контейнера на основе их значений flex-grow и flex-shrink.
  • baseline: это значение выравнивает flex-элементы так, чтобы их базовые линии совпадали. Элементы выравниваются на основе их базовой линии, которая определяется свойствами font-size и line-height.

.container {
  align-items: stretch | flex-start | flex-end | center | baseline
}

выравнивание содержимого

Свойство align-content используется для вертикального выравнивания нескольких строк flex-элементов внутри контейнера, когда вдоль поперечной оси есть дополнительное пространство. Это применимо только тогда, когда есть несколько строк flex-элементов, созданных либо с помощью flex-wrap: wrap, либо когда недостаточно места для всех элементов в одной строке. Вот описания для каждого возможного значения:

  • flex-start: это значение выравнивает строки гибких элементов в верхней части контейнера.
  • flex-end: это значение выравнивает строки гибких элементов в нижней части контейнера.
  • center: это значение центрирует строки гибких элементов вертикально в контейнере.
  • space-between: это значение распределяет строки гибких элементов равномерно вдоль поперечной оси, при этом первая строка находится вверху контейнера, а последняя строка внизу.
  • space-around: это значение равномерно распределяет строки flex-элементов вдоль поперечной оси с одинаковым расстоянием между каждой строкой и верхней и нижней частью контейнера.
  • stretch: это значение растягивает строки гибких элементов, чтобы заполнить контейнер по вертикали. Линии растягиваются, чтобы соответствовать высоте контейнера на основе их значений flex-grow и flex-shrink.

.container {
  align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline 
}

разрыв, разрыв строки, разрыв столбца

gap, row-gap и column-gap — это свойства CSS, используемые в сочетании с макетом CSS flexbox. Эти свойства позволяют добавлять интервалы между гибкими элементами более эффективным способом, чем использование полей.

  • gap: это свойство указывает размер промежутка между гибкими элементами как в горизонтальном, так и в вертикальном направлениях. Это сокращенное свойство для row-gap и column-gap и устанавливает значение для обоих.

Пример:

.container {
  display: flex;
  gap: 10px;
}

Этот код устанавливает зазор в 10 пикселей между всеми гибкими элементами внутри контейнера.

  • row-gap: это свойство определяет размер промежутка между гибкими элементами только в вертикальном направлении.

Пример:

.container {
  display: flex;
  flex-direction: column;
  row-gap: 10px;
}

Этот код устанавливает зазор в 10 пикселей между всеми строками flex-элементов в контейнере.

  • column-gap: это свойство определяет размер промежутка между гибкими элементами только в горизонтальном направлении.

Пример:

.container {
  display: flex;
  column-gap: 10px;
}

Этот код устанавливает зазор в 10 пикселей между всеми столбцами гибких элементов в контейнере. Обратите внимание, что это свойство работает только в том случае, если для свойства flex-wrap установлено значение wrap или wrap-reverse.

Свойства Flexbox для детей (элементы)

заказ

Свойство order используется для изменения порядка flex-элементов в контейнере. По умолчанию все flex-элементы имеют значение порядка, равное 0. Вы можете установить для свойства order положительное или отрицательное целочисленное значение, чтобы изменить порядок flex-элемента.

Пример :

<div class="container">
  <div class="item item-1">1</div>
  <div class="item item-2">2</div>
  <div class="item item-3">3</div>
  <div class="item item-4">4</div>
</div>
.container {
  display: flex;
  flex-wrap: wrap;
}
.item {
  display: flex;
  justify-content: center;
  align-items: center;
}
.item-1 {
  order: 2;
}
.item-2 {
  order: 1;
}
.item-3 {
  order: 3;
}
.item-4 {
  order: 4;
}

В этом примере у нас есть контейнер с четырьмя гибкими элементами. Мы используем свойство order для изменения порядка элементов.

.item-1 имеет значение порядка 2, что означает, что он будет отображаться после .item-2.

.item-2 имеет значение порядка 1, что означает, что он будет отображаться первым.

.item-3 имеет значение порядка 3, что означает, что он будет отображаться после .item-1

.item-4 имеет значение порядка 4, что означает, что он будет отображаться последним.

Используя свойство order, мы можем изменить порядок flex-элементов внутри контейнера без изменения структуры HTML.

гибкий рост

Свойство flex-grow используется для указания того, насколько должен увеличиваться flex-элемент относительно других flex-элементов внутри того же контейнера. Это безразмерное значение, представляющее долю доступного пространства, которое должен занимать элемент.

Если для всех элементов flex-grow установлено значение 1, оставшееся пространство контейнера будет распределено поровну между всеми дочерними элементами. Если один из дочерних элементов имеет значение 2, этот дочерний элемент будет занимать в два раза больше места, чем другие (или, по крайней мере, попытается).

Вот пример:

.container {
  display: flex;
  width: 500px;
}
.item {
  flex-grow: 1;
  background-color: red;
}

В этом примере контейнер имеет ширину 500 пикселей и содержит три flex-элемента с классом .item. Свойство flex-grow устанавливается равным 1 для каждого элемента. Это означает, что каждый элемент должен занимать одинаковое количество свободного места в контейнере. Поскольку элементов три, каждый из них будет занимать треть доступного места.

Если мы добавим в контейнер еще один элемент и установим для его свойства flex-grow значение 2, вот так:

.container {
  display: flex;
  width: 500px;
}
.item {
  flex-grow: 1;
  background-color: red;
}
.item-4 {
  flex-grow: 2;
  background-color: blue;
}

Четвертый элемент будет занимать в два раза больше места, чем другие элементы, так как его значение flex-grow равно 2. Это означает, что он будет занимать две пятых доступного пространства, в то время как другие элементы будут занимать одну-две пятых. пятая каждый.

гибкая основа

Свойство flex-basis используется для установки начального размера гибкого элемента до того, как любое доступное пространство будет распределено между элементами.

Вот пример использования flex-basis:

.item {
  flex-basis: 150px;
}

В этом примере для свойства flex-basis установлено значение 150 пикселей для класса .item. Это означает, что начальный размер элемента будет 150 пикселей, а оставшееся пространство будет распределено между другими гибкими элементами.

Важно отметить, что flex-basis — это лишь одно из свойств, управляющих размером flex-элементов. Два других — flex-grow и flex-shrink. Вместе эти свойства образуют так называемый «фактор гибкости», который определяет, как доступное пространство распределяется между элементами гибкости.

Вот пример того, как все три свойства работают вместе:

.item {
  flex-basis: 150px;
  flex-grow: 1;
  flex-shrink: 0;
}

В этом примере свойство flex-basis устанавливает начальный размер элемента равным 150px. Свойство flex-grow имеет значение 1, что означает, что элемент будет увеличиваться пропорционально другим гибким элементам в контейнере, когда есть свободное место. Свойство flex-shrink установлено равным 0, что означает, что элемент не будет сжиматься, если в контейнере недостаточно места.

гибкая усадка

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

Вот пример, который показывает, как работает flex-shrink:

<div class="container">
  <div class="box box1">Box 1</div>
  <div class="box box2">Box 2</div>
  <div class="box box3">Box 3</div>
</div>
.container {
  display: flex;
}
.box {
  flex-basis: 100px;
  height: 100px;
  border: 1px solid black;
}
.box1 {
  flex-grow: 1;
  flex-shrink: 1;
}
.box2 {
  flex-grow: 1;
  flex-shrink: 2;
}
.box3 {
  flex-grow: 1;
  flex-shrink: 3;
}

В этом примере у нас есть контейнер с тремя гибкими элементами. Каждый элемент имеет flex-базис 100px, который устанавливает начальный размер элементов. Свойство flex-grow установлено равным 1 для всех элементов, что означает, что все они будут расти одинаково, если на главной оси есть дополнительное пространство.

Однако свойство flex-shrink имеет разные значения для каждого элемента. Первый элемент имеет значение flex-shrink, равное 1, что означает, что он будет сжиматься пропорционально другим элементам, если места недостаточно. Второй элемент имеет значение flex-shrink, равное 2, что означает, что он будет сжиматься в два раза больше, чем первый элемент. Третий элемент имеет значение flex-shrink, равное 3, что означает, что он будет сжиматься в три раза больше, чем первый элемент.

Если в контейнере недостаточно места для размещения всех элементов в исходном размере, элементы с более высокими значениями flex-shrink сожмутся больше, чем элементы с более низкими значениями. Например, если ширина контейнера всего 250 пикселей, первый элемент сохранит свой первоначальный размер 100 пикселей, второй элемент уменьшится до 75 пикселей, а третий элемент уменьшится до 50 пикселей.

Заключение

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

Мы узнали, как создать контейнер Flexbox, как настроить свойства Flexbox для дочерних элементов и как использовать Flexbox для создания адаптивных макетов. Мы также изучили некоторые менее известные свойства Flexbox, такие как gap, flex-basis и order.

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

Подпишитесь на мою (бесплатную) еженедельную рассылку о писательстве и веб-разработке — https://sarveshh.beehiiv.com/subscribe

Если вам это понравилось, вам могут понравиться: