Реалізація Sticky Header/Footer на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

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

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Реалізація Sticky Header/Footer на сайті
Проста
~1 робочий день
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Реалізація Sticky Header/Footer на вебсайті

Sticky-елементи тривіальні через position: sticky, але правильна реалізація враховує напрямок прокрутки, продуктивність анімацій, safe-area на мобільних та конфлікти з anchor-посиланнями.

Базовий sticky header

Використовуємо position sticky з will-change оптимізацією. Додаємо тінь на порозі скролу. Приховуємо при скролі вниз, показуємо при скролі вгору на мобільних.

.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: #fff;
  will-change: transform;
  transition: box-shadow 0.2s ease;
}

.site-header--scrolled {
  box-shadow: 0 2px 20px rgba(0, 0, 0, 0.1);
}

Hide-on-scroll: приховуємо при скролі вниз

Популярний паттерн: хедер зникає при скролі вниз та з'являється при скролі вгору. Корисно для економії місця на мобільних.

const THRESHOLD = 100
const HIDE_AFTER = 50
let scrollStart = 0
let hidden = false

function onScroll() {
  const y = window.scrollY
  const diff = y - lastScrollY

  if (diff > 0) {
    // Скролл вниз
    if (!hidden && y > THRESHOLD && y - scrollStart > HIDE_AFTER) {
      header.classList.add('site-header--hidden')
      hidden = true
    }
  } else {
    // Скролл вгору
    if (hidden) {
      header.classList.remove('site-header--hidden')
      hidden = false
      scrollStart = y
    }
  }

  lastScrollY = y
}

React: хук для sticky-логіки

function useStickyHeader(hideOnScrollDown = true) {
  const [state, setState] = useState({
    isScrolled: false,
    isVisible: true,
    scrollY: 0,
  })

  useEffect(() => {
    let ticking = false

    const handler = () => {
      if (ticking) return
      ticking = true

      requestAnimationFrame(() => {
        const y = window.scrollY
        setState(prev => ({
          isScrolled: y > 10,
          isVisible: hideOnScrollDown ? (y < 100 || prev.isVisible) : true,
          scrollY: y,
        }))
        ticking = false
      })
    }

    window.addEventListener('scroll', handler, { passive: true })
    return () => window.removeEventListener('scroll', handler)
  }, [hideOnScrollDown])

  return state
}

Sticky footer / bottom navigation

Використовуємо fixed позиціонування для постійного футера. Застосовуємо safe-area-inset для iPhone safe zone.

.bottom-nav {
  position: fixed;
  bottom: 0;
  padding-bottom: env(safe-area-inset-bottom);
}

Конфлікт з anchor-посиланнями

Використовуємо scroll-margin-top для врахування sticky header, що перекриває якорі:

[id] {
  scroll-margin-top: calc(var(--header-height) + 16px);
}

Терміни

Sticky header з тінню при скролі — 1–2 години. З hide-on-scroll анімацією та React-хуком — половина дня. З bottom nav, safe-area, sticky sidebar — 1 день.