https://i.imgur.com/m47OWUW.jpg

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

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

Основы CSS: Позиционирование элементов
Прежде чем перейти к теории, не помешает освежить тему позиционирования элементов. Для этого посмотрите ролик с нашего канала:

Знание концепций позиционирования важно для понимания position: sticky. Статическое, относительное и абсолютное позиционирование ограничиваются одной областью страницы, position: sticky предоставляет возможность создавать элементы, которые начинают вести себя "липко" относительно видимой области экрана при прокрутке страницы.

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

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

Отличия от других методов позиционирования и особенности:

  • Местоположение на странице: Основное отличие position: sticky от position: fixed заключается в том, что элементы с position: sticky сохраняют свою исходную позицию, пока не достигнут определенного момента. В то время как элементы с position: fixed всегда остаются на одной и той же позиции на экране, независимо от прокрутки.

  • Прилипание: Элементы с position: sticky прикрепляются к родительскому контейнеру, который имеет прокрутку (обычно это окно браузера). Это означает что вы можете создавать боковые панели, шапки таблиц и другие элементы, которые остаются видимыми внутри определенной области страницы.

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

посмотреть поддержку на сайте CanIUseIt

Принцип работы
Теперь давайте более подробно разберем, как именно работает CSS-свойство и как элемент становится "липким" (sticky) в процессе прокрутки страницы.

Как элемент становится "липким" (sticky):
Сначала элемент имеет стандартное позиционирование (если не прописаны другие свойства) — это position: static; То есть элемент располагается в том месте, где он был задан в HTML-коде.

Сначала нужно указать пороговое значение (offset), при достижении которого элемент начнет "липнуть". Это значение может быть указано с помощью свойств top, right, bottom или left. И тогда пользователь прокручивает страницу и элемент достигает указанного порогового значения, элемент становится "липким". Это означает, что он остается на месте и больше не прокручивается, как остальное содержимое страницы. Элемент прилипает к верхней или нижней границе видимой области экрана, в зависимости от указанного значения top или bottom если прокрутка вверх-вниз, right или left если прокрутка влево-вправо.

Объяснение "оффсета" (offset) и "скролла" (scroll)
  • Оффсет (offset): Это пороговое значение, которое определяет, на каком расстоянии от верхней или нижней границы видимой области элемент должен начать прилипать. Оффсет может быть задан в пикселях, процентах или других доступных единицах измерения. Например, top: 50px; означает, что элемент начнет "липнуть" при прокрутке до 50 пикселей от верхней границы видимой области.

  • Скролл (scroll): Элемент становится "липким" только в процессе прокрутки страницы, когда пользователь взаимодействует с сайтом. Когда страница прокручивается, браузер отслеживает положение элементов и, при достижении порогового значения (offset), применяет эффект "липкости". Если пользователь прокручивает страницу вверх, элемент вернется к своей исходной позиции, как только он вернется за пределы порогового значения.

Примеры использования
Рассмотрим применение этого свойства на практике. Ниже ссылки на примеры, найденные в сети.

Почему не работает?
Ниже перечислены распространённые ошибки и причины почему свойство не будет работать.

  • Отсутствие заданного "оффсета" (offset): Одной из основных причин, почему position: sticky может не работать, является отсутствие или неправильное указание порогового значения (offset). Если вы забыли задать top, right, bottom или left, элемент не будет знать, когда начать прилипать.

  • Отсутствие родительского контейнера с прокруткой: Элемент, к которому применяется position: sticky, должен находиться в родительском контейнере с прокруткой. Если такого контейнера нет, "липкость" не будет работать. Убедитесь, что родительский элемент имеет overflow с заданным значением кроме visible.

  • Проблемы с браузерной поддержкой: Некоторые старые версии браузеров могут не поддерживать position: sticky. Проверьте совместимость с целевыми браузерами и рассмотрите альтернативные методы, если поддержка position: sticky ограничена.

  • Конфликт с другими стилями: Другие CSS-свойства и стили могут повлиять на работу position: sticky. Убедитесь, что у элемента нет конфликтов с другими свойствами, которые могут изменять его позицию.

  • Неправильная спецификация направления (direction): Если вы используете значение top или bottom, убедитесь, что вы правильно указали направление текста на веб-странице (LTR или RTL), так как оно может влиять на интерпретацию свойства position: sticky.

  • Недостаточное контентное пространство: Если внутреннее содержимое элемента слишком маленькое, "липкость" может не иметь смысла. Убедитесь, что у элемента достаточно контентного пространства для того, чтобы имело смысл использовать position: sticky.

  • Проблемы с измерением и размерами элемента: Ошибки в измерениях элемента могут привести к неправильному функционированию position: sticky. Убедитесь, что ширина и высота элемента заданы корректно.

  • Прозрачный фон или неправильные z-индексы: Иногда элементы с прозрачным фоном или неправильными z-индексами могут мешать "липкости" элемента. Убедитесь, что фон элемента не мешает его взаимодействию с другими элементами.

  • Ошибки в HTML и CSS: Неправильное структурирование HTML и неправильно оформленные стили могут быть причиной неправильной работы position: sticky. Убедитесь, что ваш HTML и CSS синтаксически верны.

Если не получается найти ошибку самостоятельно - обратитесь в нашу техподдержку. Она работает 24/7.

Надеюсь, эта статья вдохновит вас на эксперименты с position: sticky и объяснит базовые понятия, касающиеся данного свойства. Помните, практика и эксперименты - это ключи к успешному освоению CSS-вёрстки. Удачи!