Фиксированный div после прокрутки: HTML, CSS и JavaScript
Быстрый ответ
Чтобы div оставался в верхней части страницы во время прокрутки, используйте следующие свойства CSS: position: sticky; top: 0;.
.sticky-top {
    position: sticky;
    top: 0;
}
После этого примените заданный класс к нужному элементу:
<div class="sticky-top">Этот контент будет зафиксирован в верхней части при прокрутке</div>
Когда элемент достигнет верхней границы экрана, div с классом sticky-top зафиксируется вверху благодаря свойствам position: sticky; и top: 0.

Фиксация с использованием JavaScript и jQuery
Если требуется поддержка устаревших браузеров, где position: sticky; не поддерживается, вы можете динамически добавлять класс sticky-top с использованием JavaScript или jQuery, в зависимости от позиции скролла.
Условия переключения фиксации
const stickyDiv = document.querySelector('.my-div'); // Выбираем необходимый div
const stickyPoint = stickyDiv.offsetTop; // Точка, при достижении которой элемент становится фиксированным
window.addEventListener('scroll', () => {
  if (window.pageYOffset >= stickyPoint) {
    stickyDiv.classList.add('sticky-top'); // Фиксируем элемент, когда прокрутили до нужной точки
  } else {
    stickyDiv.classList.remove('sticky-top'); // Освобождаем его, если скролл находится выше этой точки
  }
});
Повышение производительности путем кэширования селекторов
Сохраните селекторы в переменные, чтобы уменьшить обращения к DOM и улучшить производительность.
const stickyDiv = document.querySelector('.my-div');
const stickyPoint = stickyDiv.offsetTop;
const onScroll = () => {
  if (window.pageYOffset >= stickyPoint) {
    stickyDiv.classList.add('sticky-top');
  } else {
    stickyDiv.classList.remove('sticky-top');
  }
};
window.addEventListener('scroll', onScroll); // Функция onScroll будет переключать класс
Визуализация
Вот как будет выглядеть концепция фиксированного div:
До прокрутки:
+------------------------+
| Заголовок сайта (🔗 Фиксирован) |
+------------------------+
| Контент                |
|                        |
+------------------------+
После прокрутки:
+------------------------+
| Заголовок сайта (🔗 Остается вверху) | 👀 Теперь он всегда на виду, словно надежный страж порядка
+------------------------+
| Прокручиваемый контент (📜 Спускающийся вниз)  |
|                        |
+------------------------+
Теперь заголовок сайта, казалось бы, творит чудеса, пребывая в верхней части экрана при прокрутке.
Устранение нестабильности макета с помощью CSS и HTML
Добавьте замыкающий пустой div, чтобы избежать резких изменений макета, когда div переходит в фиксированное состояние.
<div class="anchor-div" style="height: 100px;"></div> <!-- "Магия" произойдет здесь -->
<div class="my-div">...</div> <!-- Реальный div с контентом -->
Создание класса для фиксации и его динамическое переключение
Определите "фиксирующий" класс в CSS и меняйте его динамически с помощью JavaScript или jQuery:
.sticky-top {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 100px;
}
jQuery упрощает переключение классов, работая почти как волшебство.
const $stickyDiv = $('.my-div');
const stickyPoint = $stickyDiv.offset().top; // Место "трансформации"
$(window).on('scroll', () => {
  if ($(window).scrollTop() >= stickyPoint) {
    $stickyDiv.addClass('sticky-top'); // Притягиваем div "как волшебной палочкой"
  } else {
    $stickyDiv.removeClass('sticky-top'); // И возвращаем ему обыденность
  }
});
Калибровка якорных ссылок
"В прокрутке заключена бесконечность, и, устремив взор в нее на слишком долго, можно потеряться." – версия Ницше для веб-разработчика.
Фиксированные заголовки могут скрывать якорные разделы при прокрутке. Установите небольшую коррекцию:
$(document).on('click', 'a[href^="#"]', function(event) {
  event.preventDefault();
  const target = $($(this).attr('href'));
  const offsetTop = target.offset().top – $('.sticky-top').outerHeight();
  $('html, body').animate({
    scrollTop: offsetTop
  }, 0);
});
Полезные материалы
- position – CSS: Каскадные таблицы стилей | MDN. Надежный справочник по MDN для понимания position: stickyв CSS.
- position: sticky; | CSS-Tricks. CSS-Tricks представляет практические рекомендации.
- Разбор строки запроса в JavaScript – Stack Overflow. Подробное обсуждение позиционирования с использованием jQuery.
- GitHub – wilddeer/stickyfill: Полифил для CSS position: sticky. Полезный полифилл для использования в устаревших браузерах.
- Can I use... Support tables for HTML5, CSS3, etc.. Используйте этот проверочный сервис для определения совместимости CSS position: stickyв разных браузерах.


