Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Flex CSS: Адаптивность сайта

В курсе про Flex много говорилось про то, что модуль помогает разработчикам адаптировать сайты для мобильных устройств. Мы рассмотрим подходы, которые позволят быстро адаптировать сайт под использование на мобильных устройствах. Главными нашими помощниками станут два свойства, о которых шла речь в курсе про Flex — это flex и flex-wrap.

Как и в прошлом уроке, для примера возьмем три блока, которые расположены в одну строку. В отличие от урока про резиновую верстку, выставим ширину каждого блока в 266.66px. Другими словами, сделаем фиксированную ширину блоков:

.container {
  width: 800px;
}

.section {
  display: flex;
}

.section .item {
  flex: 0 0 266.66px;
}

See the Pen css_adaptive_percent_1 by Hexlet (@hexlet) on CodePen.

Что случится с такими элементами, если разрешение будет меньше 800 пикселей по ширине? Появится горизонтальная прокрутка. Это не очень очевидно для пользователя, поэтому он может упустить важную информацию на нашей странице.

See the Pen css_adaptive_flex_1 by Hexlet (@hexlet) on CodePen.

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

Такую катастрофу можно предотвратить, если воспользоваться правилом flex-wrap. Оно подскажет браузеру перенести элементы, которые не помещаются в контейнер. Добавим это правило в селектор .section и посмотрим, как станет выглядеть наш блок при ширине 500px:

.section {
  display: flex;
  flex-wrap: wrap;
}

See the Pen css_adaptive_flex_2 by Hexlet (@hexlet) on CodePen.

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

Кроме flex-wrap, нам может помочь еще и правило flex. Свойство flex объединяет в себе три свойства:

  • flex-grow
  • flex-shrink
  • flex-basis

Чтобы блоки вели себя адаптивно и «резиново», нужно разрешить элементам сжиматься по необходимости и занимать свободное пространство, если оно доступно. Базовую ширину мы задаем через свойство flex-basis — выставим там значение 266.6px. Мы разрешаем блокам сжиматься и занимать свободное пространство, поэтому здесь flex-basis — это значение по умолчанию:

.section .item {
  flex: 1 1 266.66px;
}

Теперь посмотрим на поведения блоков в трех различных разрешениях:

  • 800 пикселей по ширине
  • 600 пикселей по ширине
  • 400 пикселей по ширине

See the Pen css_adaptive_flex_3 by Hexlet (@hexlet) on CodePen.


Самостоятельная работа

Реализуйте у себя на компьютере пример из этого урока. Попробуйте разные значения свойства flex


Дополнительные материалы

  1. Свойство flex-wrap
  2. Свойство flex

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»