Назад Вперед Зміст


Позиціонування елементів у HTML/CSS

Sticky — гібрид relative та fixed

Зміст

Теорія: Що таке sticky? ↑

Sticky — це гібрид relative та fixed. Елемент поводиться як relative, доки не досягне певної позиції при прокрутці, після чого стає fixed.

Основна ідея: елемент «прилипає» до заданої межі (top, bottom, left, right) під час прокрутки контейнера.

Важливо: Sticky працює лише всередині батьківського контейнера. Як тільки батько виходить з області видимості, елемент перестає бути липким.

Приклад 1: Sticky Header ↑

Класичний випадок — закріплення шапки сайту при прокрутці. Шапка завжди залишається видимою зверху.

📌 Шапка (sticky top: 0)

Прокрутіть цей контейнер вниз...

Шапка залишиться приклеєною зверху.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Кінець контейнера.

.sticky-header {
    position: sticky;
    top: 0;
    background: #2c3e50;
    color: #fff;
    padding: 10px 15px;
    z-index: 10;
}

Меню, яке «прилипає» на відстані 10px від верху при прокрутці.

Прокрутіть вниз...

Меню буде липнути на top: 10px.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

.sticky-menu {
    position: sticky;
    top: 10px;
    background: #fff;
    box-shadow: 0 2px 10px rgba(0,0,0,0.1);
    padding: 10px;
    z-index: 10;
}

Приклад 3: Sticky Card ↑

Картка, яка прилипає до верху з відстанню 20px — зручно для реклами або важливої інформації в бічній панелі.

Прокрутіть вниз...

🔥 Акція!
Знижка 50% на всі курси

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

.sticky-card {
    position: sticky;
    top: 20px;
    background: #fff;
    box-shadow: 0 5px 15px rgba(0,0,0,0.2);
    padding: 15px;
    border-radius: 12px;
    border-left: 5px solid #3498db;
}

Приклад 4: Sticky Badge ↑

Маленький бейдж або мітка, яка залишається видимою при прокрутці.

Прокрутіть вниз...

🔔 Нове

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Libero, ad.

.sticky-badge {
    position: sticky;
    top: 50px;
    background: #e74c3c;
    color: #fff;
    padding: 5px 12px;
    border-radius: 20px;
    display: inline-block;
}

Обмеження та підтримка ↑

Обмеження

Sticky не працює, якщо батьківський елемент має overflow: hidden, scroll або auto. Також потрібна підтримка браузера (не працює в IE).

Крім того, обов'язково потрібно задати одне з значень top, bottom, left або right, інакше sticky не буде працювати.

Код усіх прикладів (HTML + CSS) ↑

<!-- Sticky Header -->
<div class="demo-scroll-container">
    <div class="sticky-header">📌 Шапка</div>
    <!-- контент -->
</div>

<!-- Sticky Menu -->
<div class="demo-scroll-container">
    <div class="sticky-menu">
        <a href="#">Головна</a>
        <a href="#">Про нас</a>
    </div>
</div>

<!-- Sticky Card -->
<div class="demo-scroll-container">
    <div class="sticky-card">
        <strong>🔥 Акція!</strong>
    </div>
</div>

<!-- Sticky Badge -->
<div class="demo-scroll-container">
    <div class="sticky-badge">🔔 Нове</div>
</div>