Last active
May 2, 2021 05:45
-
-
Save peterkarn/152f88f79e8ed704e3dc8926de1d7853 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<div class="wrapper"> | |
<header class="header"> | |
<div class="header__container"> | |
<a href="" class="header__logo"></a> | |
<div class="header__menu menu"> | |
<div class="menu__icon"> | |
<span></span> | |
</div> | |
<nav class="menu__body"> | |
<ul class="menu__list"> | |
<li><a data-goto=".page__section_1" href="#" class="menu__link">Раздел №1</a></li> | |
<li><a data-goto=".page__section_2" href="#" class="menu__link">Раздел №2</a></li> | |
<li><a data-goto=".page__section_3" href="#" class="menu__link">Раздел №3</a></li> | |
<li> | |
<a href="" class="menu__link">Страница №1</a> | |
<span class="menu__arrow"></span> | |
<ul class="menu__sub-list"> | |
<li> | |
<a href="" class="menu__sub-link">Раздел страницы №1</a> | |
</li> | |
<li> | |
<a href="" class="menu__sub-link">Раздел страницы №2</a> | |
</li> | |
<li> | |
<a href="" class="menu__sub-link">Раздел страницы №3</a> | |
</li> | |
</ul> | |
</li> | |
<li> | |
<a href="" class="menu__link">Страница №2</a> | |
</li> | |
</ul> | |
</nav> | |
</div> | |
</div> | |
</header> | |
<main class="page"> | |
<section class="page__section page__section_1"> | |
<h1 class="page__title">Отличная статья</h1> | |
<div class="page__text"> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
</div> | |
</section> | |
<section class="page__section page__section_2"> | |
<h2 class="page__sub-title">Отличный раздел сайта</h2> | |
<div class="page__text"> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
</div> | |
</section> | |
<section class="page__section page__section_3"> | |
<h2 class="page__sub-title">Отличный раздел сайта</h2> | |
<div class="page__text"> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Doloribus neque ratione modi mollitia natus | |
voluptas culpa architecto officiis, sed dolorem quasi? Voluptatem laborum ad assumenda quos officiis provident | |
quaerat libero.</p> | |
</div> | |
</section> | |
</main> | |
</div> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict" | |
const isMobile = { | |
Android: function () { | |
return navigator.userAgent.match(/Android/i); | |
}, | |
BlackBerry: function () { | |
return navigator.userAgent.match(/BlackBerry/i); | |
}, | |
iOS: function () { | |
return navigator.userAgent.match(/iPhone|iPad|iPod/i); | |
}, | |
Opera: function () { | |
return navigator.userAgent.match(/Opera Mini/i); | |
}, | |
Windows: function () { | |
return navigator.userAgent.match(/IEMobile/i); | |
}, | |
any: function () { | |
return ( | |
isMobile.Android() || | |
isMobile.BlackBerry() || | |
isMobile.iOS() || | |
isMobile.Opera() || | |
isMobile.Windows()); | |
} | |
}; | |
if (isMobile.any()) { | |
document.body.classList.add('_touch'); | |
let menuArrows = document.querySelectorAll('.menu__arrow'); | |
if (menuArrows.length > 0) { | |
for (let index = 0; index < menuArrows.length; index++) { | |
const menuArrow = menuArrows[index]; | |
menuArrow.addEventListener("click", function (e) { | |
menuArrow.parentElement.classList.toggle('_active'); | |
}); | |
} | |
} | |
} else { | |
document.body.classList.add('_pc'); | |
} | |
// Меню бургер | |
const iconMenu = document.querySelector('.menu__icon'); | |
const menuBody = document.querySelector('.menu__body'); | |
if (iconMenu) { | |
iconMenu.addEventListener("click", function (e) { | |
document.body.classList.toggle('_lock'); | |
iconMenu.classList.toggle('_active'); | |
menuBody.classList.toggle('_active'); | |
}); | |
} | |
// Прокрутка при клике | |
const menuLinks = document.querySelectorAll('.menu__link[data-goto]'); | |
if (menuLinks.length > 0) { | |
menuLinks.forEach(menuLink => { | |
menuLink.addEventListener("click", onMenuLinkClick); | |
}); | |
function onMenuLinkClick(e) { | |
const menuLink = e.target; | |
if (menuLink.dataset.goto && document.querySelector(menuLink.dataset.goto)) { | |
const gotoBlock = document.querySelector(menuLink.dataset.goto); | |
const gotoBlockValue = gotoBlock.getBoundingClientRect().top + pageYOffset - document.querySelector('header').offsetHeight; | |
if (iconMenu.classList.contains('_active')) { | |
document.body.classList.remove('_lock'); | |
iconMenu.classList.remove('_active'); | |
menuBody.classList.remove('_active'); | |
} | |
window.scrollTo({ | |
top: gotoBlockValue, | |
behavior: "smooth" | |
}); | |
e.preventDefault(); | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.page { | |
padding: 90px 0px 30px 0px; | |
} | |
.page__section { | |
padding: 30px; | |
max-width: 1200px; | |
margin: 0px auto; | |
} | |
.page__section_1 { | |
background-color: #794f45; | |
} | |
.page__section_2 { | |
background-color: #77608d; | |
} | |
.page__section_3 { | |
background-color: #7a956b; | |
} | |
.page__title { | |
font-size: 40px; | |
margin: 0px 0px 20px 0px; | |
} | |
.page__text { | |
font-size: 16px; | |
line-height: 150%; | |
} | |
.page__text p { | |
margin: 0px 0px 20px 0px; | |
} | |
.page__sub-title { | |
font-size: 30px; | |
margin: 0px 0px 20px 0px; | |
} | |
.header { | |
position: fixed; | |
top: 0; | |
left: 0; | |
width: 100%; | |
z-index: 10; | |
background-color: #912105; | |
} | |
.header__container { | |
max-width: 1200px; | |
margin: 0px auto; | |
display: flex; | |
padding: 0px 30px; | |
align-items: center; | |
justify-content: space-between; | |
min-height: 70px; | |
} | |
.header__logo { | |
border-radius: 50%; | |
background-color: #fff; | |
position: relative; | |
z-index: 5; | |
width: 40px; | |
height: 40px; | |
} | |
.header__menu {} | |
.menu {} | |
.menu__icon { | |
display: none; | |
} | |
.menu__body {} | |
.menu__list {} | |
.menu__list>li { | |
position: relative; | |
margin: 0px 0px 0px 20px; | |
} | |
.menu__link { | |
color: #fff; | |
font-size: 18px; | |
} | |
.menu__link:hover { | |
text-decoration: underline; | |
} | |
.menu__sub-list { | |
position: absolute; | |
top: 100%; | |
right: 0; | |
background-color: #000; | |
padding: 15px; | |
min-width: 200px; | |
} | |
.menu__sub-list li { | |
margin: 0px 0px 10px 0px; | |
} | |
.menu__sub-list li:last-child { | |
margin: 0; | |
} | |
.menu__sub-link { | |
color: #fff; | |
} | |
.menu__sub-link:hover { | |
text-decoration: underline; | |
} | |
.menu__arrow { | |
display: none; | |
} | |
/* ----------------------- */ | |
body._pc .menu__list>li:hover .menu__sub-list { | |
opacity: 1; | |
visibility: visible; | |
transform: translate(0px, 0px); | |
pointer-events: all; | |
} | |
body._touch .menu__list>li { | |
display: flex; | |
align-items: center; | |
} | |
body._touch .menu__link { | |
flex: 1 1 auto; | |
} | |
body._touch .menu__arrow { | |
display: block; | |
width: 0; | |
height: 0; | |
margin: 0px 0px 0px 5px; | |
transition: transform 0.3s ease 0s; | |
border-left: 5px solid transparent; | |
border-right: 5px solid transparent; | |
border-top: 10px solid #fff; | |
} | |
body._touch .menu__list>li._active .menu__sub-list { | |
opacity: 1; | |
visibility: visible; | |
transform: translate(0px, 0px); | |
pointer-events: all; | |
} | |
body._touch .menu__list>li._active .menu__arrow { | |
transform: rotate(-180deg); | |
} | |
/* ----------------------- */ | |
@media (min-width: 767px) { | |
.menu__list { | |
display: flex; | |
align-items: center; | |
} | |
.menu__list>li { | |
padding: 10px 0; | |
} | |
.menu__sub-list { | |
transform: translate(0px, 10%); | |
opacity: 0; | |
visibility: hidden; | |
pointer-events: none; | |
transition: all 0.3s ease 0s; | |
} | |
} | |
@media (max-width: 767px) { | |
.menu__icon { | |
z-index: 5; | |
display: block; | |
position: relative; | |
width: 30px; | |
height: 18px; | |
cursor: pointer; | |
} | |
.menu__icon span, | |
.menu__icon::before, | |
.menu__icon::after { | |
left: 0; | |
position: absolute; | |
height: 10%; | |
width: 100%; | |
transition: all 0.3s ease 0s; | |
background-color: #fff; | |
} | |
.menu__icon::before, | |
.menu__icon::after { | |
content: ""; | |
} | |
.menu__icon::before { | |
top: 0; | |
} | |
.menu__icon::after { | |
bottom: 0; | |
} | |
.menu__icon span { | |
top: 50%; | |
transform: scale(1) translate(0px, -50%); | |
} | |
.menu__icon._active span { | |
transform: scale(0) translate(0px, -50%); | |
} | |
.menu__icon._active::before { | |
top: 50%; | |
transform: rotate(-45deg) translate(0px, -50%); | |
} | |
.menu__icon._active::after { | |
bottom: 50%; | |
transform: rotate(45deg) translate(0px, 50%); | |
} | |
.menu__body { | |
position: fixed; | |
top: 0; | |
left: -100%; | |
width: 100%; | |
height: 100%; | |
background-color: rgba(0, 0, 0, 0.9); | |
padding: 100px 30px 30px 30px; | |
transition: left 0.3s ease 0s; | |
overflow: auto; | |
} | |
.menu__body._active { | |
left: 0; | |
} | |
.menu__body::before { | |
content: ""; | |
position: fixed; | |
width: 100%; | |
top: 0; | |
left: 0; | |
height: 70px; | |
background-color: #912105; | |
z-index: 2; | |
} | |
.menu__list>li { | |
flex-wrap: wrap; | |
margin: 0px 0px 30px 0px; | |
} | |
.menu__list>li:last-child { | |
margin-bottom: 0; | |
} | |
.menu__list>li._active .menu__sub-list { | |
display: block; | |
} | |
.menu__link { | |
font-size: 24px; | |
} | |
.menu__sub-list { | |
position: relative; | |
background-color: #fff; | |
flex: 1 1 100%; | |
margin: 20px 0px 0px 0px; | |
display: none; | |
} | |
.menu__sub-link { | |
font-size: 20px; | |
color: #000; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment