Вы когда-нибудь хотели создать липкое меню, но без необходимости писать для него дополнительный JavaScript? CSS поможет вам теперь!
Ключом к успеху является свойство position: sticky
. И несмотря на то, что он помечен как «частичная поддержка» для большинства браузеров, он работает довольно хорошо. «Частичное» связано с тем, что некоторые браузеры неправильно обрабатывают это свойство в некоторых настройках таблицы. Если вы не используете таблицы и не хотите, чтобы там была какая-то липкость, все в порядке.
Вот мое изменение кода на моем личном сайте:
До
JavaScript
const navbar = document.querySelector('.navbar'); let sticky = navbar.offsetTop; const navbarScroll = () => { if (window.pageYOffset >= sticky) { navbar.classList.add('sticky') } else { navbar.classList.remove('sticky'); } };
window.onscroll = navbarScroll;
Таблица стилей
.navbar {
position: relative;
}
.sticky {
position: fixed;
top: 0;
left: 0;
}
После
JavaScript
// nope
Таблица стилей
.navbar {
position: sticky;
top: 0; /* it does not reposition right away,
but determines at which point it sticks */
}
Как говорится в комментарии, вам понадобится top
, чтобы сказать, куда вставить элемент после прокрутки к нему. Значение: до тех пор, пока вы не прокрутите полосу вверх до нуля в текущем представлении, она будет продолжать прокручиваться вверх. После этого остается там.
Не проверено, но это может работать и во всех других направлениях. Кто-то хочет нижнюю планку? ;-)
Вывод
Я думаю, что 2 строки CSS лучше, чем несколько в CSS и JS.
Чего пока нет, так это способа применить другой стиль, когда он застрял или нет, поскольку для этого нет селектора CSS. Не знаю, придет ли это когда-нибудь, но можно надеяться.
Я недавно писал об этом и об использовании JS в целом в своей статье Как я написал JavaScript, чтобы избежать JavaScript — не волнуйтесь, вам не нужно все выбрасывать, как это сделал я. Но я хочу дать вам пищу для размышлений. Может быть, вы понимаете, что решили свои проблемы с помощью слишком большого количества JS.
Также ознакомьтесь со спецификациями и разработками стандартов HTML и CSS, всегда можно найти что-то интересное. Одним из самых больших изменений за последние годы были флексбоксы и сетки, я думаю, многие веб-дизайнеры приветствовали эти дополнения.
Первоначально опубликовано на https://dev.to 14 октября 2020 г.