Общие примеры использования CSS Flexbox

В двух предыдущих постах этой серии, посвященных CSS Flexbox, были рассмотрены все свойства flexbox, применяемые к flex-container и flex-items.

В этой статье мы рассмотрим некоторые популярные и распространенные случаи использования CSS flexbox.

В конце этой статьи я также поделюсь некоторыми полезными ресурсами для изучения CSS Flexbox самым простым способом!

ОБЩИЕ СЛУЧАИ ИСПОЛЬЗОВАНИЯ CSS FLEXBOX

  • Выравнивание элементов с промежутком между ними
  • Выравнивание элементов по горизонтали
  • Выравнивание содержимого по центру
  • Разделение контейнера пополам

Мы воспользуемся примером, приведенным на рисунках ниже, и попытаемся увидеть, как flexbox был использован при создании этой веб-страницы.

1. ВЫРАВНИВАНИЕ ЭЛЕМЕНТОВ С ПРОМЕЖУТКОМ МЕЖДУ НИМИ

Одним из вариантов использования flexbox является выравнивание элементов с промежутком между ними.

  • На примере сайта navbar в заголовке имеет две секции: логотип и навигационные ссылки.
  • Они размещены так, чтобы между ними оставалось пространство, и сдвинуты по обе стороны от navbar.
  • Используя приведенный ниже код шаблона для navbar, посмотрим, как можно сдвинуть логотип и navbar так, чтобы между ними оставалось пространство.

Чтобы преобразовать это в правильную панель навигации, нам нужно сосредоточиться на родителе обоих  <h1> и  <nav>: div с классом navbar.

.navbar {
      display: flex;
      justify-content: space-between;
      align-items: center;
  }

И все! 3 строки кода, а затем логотип и навигационные ссылки сдвигаются в обе стороны с промежутком между ними.

display: flex преобразует контейнер navbar в flex-контейнер.
Ссылки <h1> и <nav> размещаются горизонтально. flex-direction: row; — главная ось по умолчанию.
justify-content: space-between; разделяет flex-элементы пространством между ними и сдвигает их в противоположные стороны контейнера (main-start и main-end).
align-items: center; помещает flex-элементы в вертикальный центр flex-контейнера.
ПРИМЕЧАНИЕ: При использовании функции justify-content: space-between; для контейнера, содержащего более двух flex-элементов, они распределяются внутри контейнера, причем первый элемент располагается вблизи main-start, а последний элемент сдвигается в main-end.
Это может быть использовано в ситуации, когда в заголовке есть только навигационные ссылки.
Ознакомьтесь с этой статьей, чтобы узнать о justify-content
Посмотрите приведенный ниже GIF, чтобы понять, как работает приведенный выше код.

Alt Text

Это окончательный вид панели навигации с пространством между логотипом и навигационными ссылками.

2. ВЫРАВНИВАНИЕ ЭЛЕМЕНТОВ ПО ГОРИЗОНТАЛИ

Другой распространенный вариант использования flexbox — выравнивание элементов по горизонтали внутри контейнера.

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

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

Чтобы выровнять все навигационные ссылки по горизонтали, нам нужно сосредоточиться на <ul> и <li> внутри .navbar nav.

display: flex делает так, что <ul> становится flex-контейнером, и по умолчанию все дочерние <li> выравниваются по горизонтали.

Чтобы понять, как это работает, посмотрите приведенный ниже GIF.

Alt Text

Это окончательный вид навигационных ссылок в панели навигации.

3. ЦЕНТРИРОВАНИЕ СОДЕРЖИМОГО

Это, пожалуй, самый распространенный вариант использования flexbox: центрирование содержимого по вертикали и горизонтали.

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

Здесь главной осью является столбец, поэтому применение flex к стекам #showcase-container , и по вертикали.

  • justify-content: center; центрирует содержимое вдоль главной оси: column.
  • align-items: center; выравнивает содержимое по центру вдоль поперечной оси: row. Их совместное использование центрирует содержимое по вертикали и горизонтали.
  • ПРИМЕЧАНИЕ: Вы можете использовать комбинации justify-content и align-items для проверки различных вариантов выравнивания элементов внутри родительского контейнера. Посмотрите этот пост, чтобы узнать больше о justify-content и align-items.

Посмотрите GIF ниже, чтобы понять, как работает центрирование содержимого.

Alt Text

Это окончательный вид и текста.

4. Разделение контейнера пополам

Основная идея flexbox заключается в том, что он легко выравнивает элементы, даже если их начальный размер неизвестен или динамичен.

  • В приведенном примере веб-страницы карточки в главной секции разделены таким образом, что одна половина содержит изображение, а другая — содержимое.
  • Используя приведенный ниже стартовый код, посмотрим, как можно разделить их на две равные секции.
  • Как обычно, возьмем родительский контейнер контейнера, который нужно разделить.
  • Родитель <img> и <h3>, <p> контейнер с классом card-body-column, который является div с классом card-body.
.card-body {
      display: flex;
      flex-wrap: wrap;
      justify-content: center;
  }
  • Приведенный выше код делает оба div с классом card-body-column flex-items.
    • Хотя эти два элемента должны быть выровнены по горизонтали, они разворачиваются на разные строки, поскольку их начальная ширина превышает ширину контейнера. Такое поведение связано с flex-wrap: wrap;
  • Давайте теперь сосредоточимся на выравнивании элементов по горизонтали, для чего нам необходимо захватить контейнер с классом card-body-column.
.card-body .card-body-column {
      flex: 1;
  }
  .card-body img {
      height: 100%;
      width: 100%;
      object-fit: cover;
  }
  • Добавление flex: 1; к .card-body-column заставляет контейнер увеличиваться или уменьшаться от одинаковой начальной ширины: 0. Таким образом, мы получаем 2 одинаковых контейнера, которые увеличиваются одинаково.
  • Но изображение не занимает всю часть контейнера, поэтому мы устанавливаем ширину и высоту равными 100%.
  • Чтобы соотношение ширины и высоты не искажалось при уменьшении или увеличении контейнера, мы также добавляем object-fit: cover;. Это позволит поместить изображение в качестве обложки в свою часть контейнера.
  • ПРИМЕЧАНИЕ: Мы можем разделить контейнеры на секции с разным соотношением сторон, увеличив значение flex для одной половины контейнера.

Посмотрите GIF-изображение ниже, чтобы понять, как работает разделение контента.

Alt Text

Посмотрите в приведенном ниже GIF, как object-fit: cover; помогает изображению.

Alt Text

Флексбоксы и адаптивные экраны

Хороший сайт — это тот, который легко работает на устройствах любого размера. Хотя flexbox упрощает компоновку, нам необходимо добавить отзывчивость. Это можно сделать с помощью медиазапросов.

Alt Text
  • Обратите внимание, как уменьшается это изображение на экранах небольших размеров. Очевидно, что это не очень привлекательно. Поэтому давайте решим эту проблему.
  • Зададим максимальную ширину и убедимся, что как только ширина экрана станет меньше максимальной ширины, мы изменим flex-направление на column.
  • Таким образом, когда размер экрана станет слишком маленьким, содержимое карточки будет укладываться друг на друга, что позволит избежать сжатия.
@media (max-width:540px) {
    .card-body {
         flex-direction: column;
    }
}
  • Когда размер экрана становится меньше 541px, главная ось становится столбцовой. В противном случае по умолчанию используется строка.
Alt Text
  • Такая же отзывчивость может быть применена к логотипу и навигационным ссылкам, которые будут располагаться вертикально и по центру панели навигации.
  • Существует множество других вариантов использования flexbox, которые можно легко обнаружить, поработав со свойствами flexbox и создавая сайты.
  • В качестве примечания отметим, что разные разработчики используют различные комбинации свойств flex для достижения одного и того же эффекта. Например. для разделения логотипа и навигационных ссылок можно заметить, что justify-content: space-between не используется, а используется align-self для отдельных flex-элементов.
  • Еще один важный вывод: flexbox — это не конец отзывчивого дизайна, и в некоторых ситуациях это может быть не самым простым решением. Например, скажем, вы хотите разделить свой сайт на header, main, sidebar и footer. В таких случаях CSS GRID гораздо проще и быстрее. НЕ СУЩЕСТВУЕТ ОДНОГО ПРАВИЛЬНОГО СПОСОБА ДЕЛАТЬ ЭТО! ВЫ АДАПТИРУЕТЕСЬ И УЧИТЕСЬ ПО МЕРЕ ИЗУЧЕНИЯ!

РЕСУРСЫ


Как и обещал, я приведу несколько ресурсов, которые помогли мне легко и эффективно освоить CSS Flexbox.

Надеюсь, это поможет вам.

  • CSS MDN Web Docs: Не торопитесь читать эту документацию, поскольку объяснения очень подробны и точны.
  • CSS Tricks: Еще один замечательный ресурс, где также объясняются основы flexbox.
  • W3C Flexbox Docs: Очень подробное и глубокое понимание CSS Flexbox
  • W3Schools: Еще один ресурс с краткими объяснениями и хорошими примерами

Этого недостаточно, поскольку после того, как вы усвоите теорию, вам нужно будет где-то ее применить.

Ниже приведены несколько увлекательных игр и задач, которые помогут вам понять flexbox практически и визуально!

  • Flexbox Defense Замечательная игра в стиле фэнтези, в которой вы используете свойства flex, чтобы не дать врагам проникнуть в вашу оборону.
  • Flexbox Froggy Еще одна игра, в которой свойства flex используются для помощи лягушонку и его друзьям, чтобы направить их к их лилипутам!
  • Flexbox Code Generator Этот сайт позволяет визуализировать свойства flex и играть с ними, изменяя комбинации свойств.
  • Building UI with CSS Flex На этом сайте можно найти задачи на создание аккуратных и удивительных пользовательских интерфейсов с помощью CSS Flexbox.
  • Dev Challenges Еще один сайт, на котором есть задачи для фронтенд- и отзывчивых веб-разработчиков по созданию компонентов и сайтов! И это (flex) завершение серии статей о CSS Flexbox.

Большое спасибо, что дочитали эту статью до конца.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии