Использование position:sticky в CSS

Использование position:sticky в CSS

От автора: вы когда-нибудь сталкивались со случаем, когда position:sticky не работает должным образом с дочерним элементом контейнера? Несколько дней назад я помогал другу решить именно эту проблему и хочу наконец написать об этом.

На самом деле эта проблема не в чем-то глючном или неправильном. Фактически, это эффект поведения CSS по умолчанию. Почему и как? Посмотрим на следующий пример.

Профессия Frontend-разработчик PRO

Готовим Frontend-разработчиков с нуля

На курсе вы научитесь создавать интерфейсы веб-сервисов с помощью языков программирования и дополнительных технологий. Сможете разрабатывать планировщики задач, мессенджеры, интернет-магазины…

До 10 проектов в портфолио для старта карьеры
Подходит для новичков без опыта в программировании
Практика на вебинарах с разработчиками из крупных компаний

У нас есть сетка с контейнером внутри шириной 250px, а остальное доступное пространство предназначено для основной секции. Все просто, правда?

Использование position:sticky в CSS

Теперь мы хотим добавить position:sticky к элементу aside, чтобы зафиксировать его при прокрутке.

Ой. Это не работает? Почему? Давайте разберемся.

Поведение элементов по умолчанию при align-items

Добавление фона к элементу aside покажет, что его высота равна высоте основной части.

Использование position:sticky в CSS

По умолчанию свойство align-items равно stretch. В результате столбец растянется по высоте, чтобы соответствовать самому большому столбцу в сетке.

Позвольте мне показать вам еще один пример, который поможет лучше проиллюстрировать проблему. У нас есть простой контейнер-сетка.

Использование position:sticky в CSS

По умолчанию карты растягиваются, чтобы соответствовать самой большой карте (первая справа). Чтобы переопределить это поведение, нам нужно изменить значение align-items установив ему значение start.

Использование position:sticky в CSS

Вернемся к исходному примеру. Чтобы показать проблему, я добавил фон в раздел aside. Попробуйте использовать checkbox в следующей демонстрации и обратите внимание, как изменяется высота боковой панели.

Нам нужно переопределить поведение по умолчанию для параметра stretch; и сделать высоту карты равной содержимому. Мы можем использовать align-self для элемента aside:

Или использовать align-items для родительского элемента, что повлияет на все дочерние элементы.

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

Другой пример

Очень похожий пример, который может иметь такое же поведение по умолчанию для сетки CSS, — это страница списка команды.

Использование position:sticky в CSS

При прокрутке мы хотим, чтобы «Дизайн» оставался неизменным. Без использования align-self: start страница не будет отображаться должным образом.

Заключение

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

Автор: Ahmad Shadeed

Источник: ishadeed.com

Редакция: Команда webformyself.

Профессия Frontend-разработчик PRO

Готовим Frontend-разработчиков с нуля

На курсе вы научитесь создавать интерфейсы веб-сервисов с помощью языков программирования и дополнительных технологий. Сможете разрабатывать планировщики задач, мессенджеры, интернет-магазины…

До 10 проектов в портфолио для старта карьеры
Подходит для новичков без опыта в программировании
Практика на вебинарах с разработчиками из крупных компаний

Читайте нас в Telegram, VK, Яндекс.Дзен

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии запрещены.