01.07.2017
Один из множества примеров сделать фиксированное меню при прокрутке.
Пример упрощен, потому что хедер изначально находится в самом верху, а при прокрутке только добавляется тень.
Используется свойство position: sticky;
, которое IE не поддерживает, поэтому в IE меню не будет фиксироваться к верхней части окна.
Для поддержки IE лучше использовать более сложный вариант фиксированного меню – Фиксированное меню при прокрутке страницы или Фиксированный блок при прокрутке с поддержкой IE.
HTML
<header class="header sticky sticky--top js-header"> <div class="grid"> <nav class="navigation"> <ul class="navigation__list navigation__list--inline"> <li class="navigation__item"><a href="#" class="is-active">Home</a></li> <li class="navigation__item"><a href="#">About Us</a></li> <li class="navigation__item"><a href="#">Work</a></li> <li class="navigation__item"><a href="#">Clients</a></li> <li class="navigation__item"><a href="#">Contact</a></li> </ul> </nav> </div> </header> <main class="main"> <div class="grid"> <h1>Lorem ipsum dolor sit.</h1> <p>...</p> </div> </main>
CSS
/* helpers/grid.css */ .grid { margin-left: auto; margin-right: auto; max-width: 48em; width: 90%; } /* helpers/sticky.css */ .sticky { position: -webkit-sticky; position: sticky; will-change: transform; } .sticky--top { top: 0; } /* layout/base.css */ * { box-sizing: inherit; } html { box-sizing: border-box; height: 100%; } body { font-family: 'Roboto', sans-serif; line-height: 1.75; margin: 0; min-height: 100%; } /* layout/header.css */ .header { background-color: #fff; padding-bottom: 1em; padding-top: 1em; } .header::after { bottom: 0; box-shadow: 0 0.0625em 0.5em rgba(0, 0, 0, .3); content: ''; left: 0; opacity: 0; position: absolute; right: 0; top: 0; -webkit-transition: opacity 0.3s; transition: opacity 0.3s; z-index: -1; } .header.is-active::after { opacity: 1; } /* layout/main.css */ .main { padding-top: 6em; padding-bottom: 6em; } /* modules/headline.css */ h1 { margin-bottom: 1.5em; margin-top: 0; } /* modules/navigation.css */ .navigation a { color: inherit; display: block; text-decoration: none; } .navigation .is-active { background-color: #000; color: #fff; padding-left: 1em; padding-right: 1em; border-radius: 999px; } .navigation__list { list-style: none; margin: -0.5em; padding: 0; } .navigation__list--inline { display: -webkit-box; display: -ms-flexbox; display: flex; } .navigation__item { margin: 0.5em; } /* modules/paragraph.css */ p { margin-bottom: 1.5em; margin-top: 1.5em; }
JS
Не забываем подключить jQuery
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
Скрипт JS
var $window = $(window); var $header = $('.header'); $window.scroll(onScroll); function onScroll() { if ($window.scrollTop()) { $header.addClass('is-active'); } else { $header.removeClass('is-active'); } }
Готовый пример:
See the Pen Sticky Header on Scroll by Denis (@deniscreative) on CodePen.0