CSS Container Queries, часть 2, продуктовый кейс
Во второй главе курса по CSS Container Queries мы разберём реальный продуктовый кейс — карточка услуги с резиновым и адаптивным поведением, которое зависит от контейнера.
Если вы ещё не знакомы с выражениями от контейнера, рекомендуем пройти первую главу курса, в которой разбирается синтаксис и основные возможности CSS Container Queries.
Для начала создадим разметку карточки.
Добавим элемент .wrapper. Это будущий контейнер, к которому мы применим контейнерные запросы.
Добавим <div class="card"> — каркас нашей карточки.
Карточка будет состоять из двух частей: основной и дополнительной.
Добавим в основную часть иконку сердца для обозначения услуги, заголовок, текст и ссылки.
В дополнительную часть добавим декоративную иконку и короткий текст.
C разметкой закончили. Перейдём к стилям.
Определим для .wrapper основные сеточные стили: ширину 100%, минимальную и максимальную ширину, автоматические внешние отступы для центровки и поля.
Получим контейнер, который тянется до ширины 860px, а затем центрируется.
Оформим карточку.
Установим внутренние отступы, изменим цвет текста и применим градиентный фон. Сделаем края карточки закруглёнными и добавим тень для украшения.
По умолчанию определим стили для узкой версии карточки, где контент расположен сверху вниз. Используем flex-direction: column.
Сетку основной части .card__info определим по аналогии с .card: флекс-контейнер с вертикальным направлением главной оси.
Добавим текстовые стили для карточки.
Добавим отступ между ссылками.
Перейдём к дополнительной части карточки.
Выровняем её по центру с помощью флексов.
Зададим стили для текста. Определим размер, максимальную ширину. Обнулим внешние отступы.
Узкая версия карточки готова. Временно установим обёртке ширину 400px, чтобы увидеть это состояние.
Узкая версия хорошо смотрится в диапазоне от 320 до 600 пикселей. Попробуйте изменить ширину .wrapper, чтобы убедиться в этом.
Для наглядности установим для .wrapper фиксированную ширину 800px и начнём создавать широкую версию карточки.
Сначала превратим .wrapper в контейнер, к которому можно делать запросы относительно его ширины. Для этого зададим ему container-type: inline-size;.
Создадим пустой запрос от контейнера с помощью директивы @container.
Укажем условие: если размер контейнера станет больше 600px, то изменим стили. Запрос всегда будет срабатывать, поскольку мы установили для .wrapper ширину 800px.
Переопределим стили широкой версии карточки.
Выстроим элементы внутри флекс-контейнера в две колонки, повернув главную ось .card с помощью flex-direction: row;.
Для основной части .card__info зададим ширину в процентах.
Прижмём элементы к краям флекс-контейнера с помощью justify-content: space-between.
Изменим выравнивание вдоль поперечной оси. Сделаем так, чтобы элементы по вертикали выравнивались по центру.
Немного увеличим пространство между элементами и поля флекс-контейнера. Так карточка в широкой версии будет выглядеть более пропорционально.
Широкая версия карточки готова.
Вернём для .wrapper ширину 100%. Также временно добавим resize: horizontal и overflow: hidden.
Теперь можно посмотреть как перестраивается карточка при изменении размеров контейнера. Для этого потяните влево или вправо область, которая появилась в правом нижнем углу контейнера.
Последние штрихи.
Именуем контейнер.
Используем имя контейнера в директиве @container.
В таком простом компоненте можно обойтись без этого, но в более сложных компонентах именование поможет избежать путаницы.
На этом вторая глава курса про CSS Container Queries завершена.