Вебинары Разобраться в IT Реферальная программа
Программирование Аналитика Дизайн Маркетинг Управление проектами
18 Фев 2023
2 мин
383

Корректировка якорных ссылок для учета фиксированного заголовка

Иногда при создании веб-страницы возникает ситуация, когда необходимо использовать якорные ссылки для навигации по странице. Это особенно актуально

Иногда при создании веб-страницы возникает ситуация, когда необходимо использовать якорные ссылки для навигации по странице. Это особенно актуально для длинных страниц, где пользователю необходимо перемещаться между различными блоками контента.

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

Рассмотрим пример. Пусть на странице есть фиксированный заголовок высотой 50px, и есть якорные ссылки, ведущие к различным блокам контента. При клике на якорную ссылку, блок контента прокручивается так, что его верхний край оказывается скрытым за заголовком. Из-за этого пользователь не видит начало контента.

Решить эту проблему можно с помощью CSS или JavaScript.

Решение с использованием CSS

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

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

Вот пример кода:

:target:before {
  content: "";
  display: block;
  height: 50px; /* высота заголовка */
  margin: -50px 0 0; /* компенсация отступа */
}

Решение с использованием JavaScript

Если же предпочитается использовать JavaScript, то можно воспользоваться методом scrollIntoView(). Этот метод позволяет прокрутить страницу так, чтобы указанный элемент оказался в верхней части видимой области страницы.

Здесь важно учесть, что scrollIntoView() прокручивает страницу до верхнего края элемента, поэтому для учета высоты заголовка нужно прокрутить страницу на дополнительную величину.

Вот пример кода:

document.querySelector("#your-anchor").addEventListener("click", function(event){
  event.preventDefault();

  let headerOffset = 50; // высота заголовка
  let elementPosition = document.querySelector("#your-anchor").getBoundingClientRect().top;
  let offsetPosition = elementPosition - headerOffset;

  window.scrollTo({
     top: offsetPosition,
     behavior: "smooth"
  });
});

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

Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей

Добавить комментарий