Фиксированное меню при прокрутке страницы только для мобильных
Немного другая вариация фиксированного меню.
- Меню фиксируется к верхней части экрана только на мобильных устройствах.
- Меню находится в середине страницы, то есть оно прилипает к верху страницы, когда касается верхней части экрана.
Код максимально простой для примера.
HTML
<div class="container">
<header class="header">HEADER</header>
<nav class="menu">MENU</nav>
<article>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Hic, labore. Error quis aliquam omnis doloribus blanditiis, quisquam quas, ipsum cum corporis incidunt inventore molestiae voluptates sequi, laudantium iure! Ab, quaerat.</p>
</article>
<footer class="footer">FOOTER</footer>
</div>
CSS
* {
padding: 0;
margin: 0;
}
.container {
position: relative;
padding-top: 0;
}
.header,
.menu,
.footer {
background-color: #333;
padding: 40px 0;
text-align: center;
color: #fff;
font-family: sans-serif;
width: 100%;
position: relative;
z-index: 2;
}
.menu {
position: sticky;
top: 0;
}
.menu.fixed {
position: fixed;
}
article {
background-color: green;
padding: 30px 0;
}
article p {
width: 640px;
max-width: 90%;
margin: 0 auto 20px;
font-size: 20px;
color: #fff;
}
.header {
background-color: blue;
}
.footer {
background-color: purple;
}
JS
Не забываем подключить jQuery
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
А затем такой код нашего скрипта:
var $menu = $(".menu");
var $menuOffsetTop = $menu.offset().top;
var $menuHeight = $menu.outerHeight();
var $menuParent = $menu.parent();
var $menuParentPaddingTop = parseFloat($menuParent.css("padding-top"));
checkWidth();
function checkWidth() {
// for mobile - you need change 1920 to 992
if (window.matchMedia("(max-width: 1920px)").matches) {
if ($menu.length !== 0) {
$(window).scroll(onScroll);
}
}
}
function onScroll() {
if ($(window).scrollTop() > $menuOffsetTop) {
$menu.addClass("fixed");
$menuParent.css({ "padding-top": $menuParentPaddingTop + $menuHeight });
} else {
$menu.removeClass("fixed");
$menuParent.css({ "padding-top": $menuParentPaddingTop });
}
}
Рабочий пример
В примере на Codepen отключена проверка на ширину экрана, чтобы пример был рабочий на экране любой ширины.
See the Pen Sticky Header on Scroll for Mobile by Denis (@deniscreative) on CodePen.
Красивая и не слишком сложная анимация, например, для загрузочной страницы сайта. HTML <h1 class="intro">[CSS animation]…
Один из множества примеров сделать фиксированное меню при прокрутке. Пример упрощен, потому что хедер изначально…
Делаем параллакс-эффект для больших блоков с фоном и для отдельных элементов на сайте. Подключаем jQuery…
Ссылки на ресурсы, которые я использую в своей работе. Это мои реферальные ссылки, плохого не…