From 70d65caf476f124de80c05a062f9ce0b79386ede Mon Sep 17 00:00:00 2001 From: Olivia206 <olivia.simonet@mmibordeaux.com> Date: Wed, 27 Jul 2022 16:54:52 +0200 Subject: [PATCH] Responsive menu --- assets/js/theme/index.js | 1 + assets/js/theme/nav/responsive.js | 42 +++++++++++++++++ assets/sass/_theme/design-system/a11y.sass | 2 +- assets/sass/_theme/design-system/header.sass | 8 ++++ assets/sass/_theme/design-system/nav.sass | 49 ++++++++++++++++++-- 5 files changed, 98 insertions(+), 4 deletions(-) create mode 100644 assets/js/theme/nav/responsive.js diff --git a/assets/js/theme/index.js b/assets/js/theme/index.js index 74d3e442..fb5786f5 100644 --- a/assets/js/theme/index.js +++ b/assets/js/theme/index.js @@ -2,4 +2,5 @@ import './body.js'; import './blocks/keyFigures'; import './blocks/timeline'; import './nav/stickyNav'; +import './nav/responsive'; diff --git a/assets/js/theme/nav/responsive.js b/assets/js/theme/nav/responsive.js new file mode 100644 index 00000000..0c1ca399 --- /dev/null +++ b/assets/js/theme/nav/responsive.js @@ -0,0 +1,42 @@ +const events = ['load', 'resize']; +let header = document.querySelector('header[role="banner"]'), + navBtn = document.querySelector('nav[role="navigation"] button'), + menuHeader = document.querySelector('.menu'), + dropdownBtns = document.querySelectorAll('.has-children a[role="button"]'), + breckpointMd = 768, + classMobile = 'show'; + +events.forEach((event) => { + window.addEventListener(event, () => { + windowWidth = window.innerWidth; + + if (windowWidth <= breckpointMd) { + navBtn.addEventListener("click", function(){ + if(menuHeader.className.includes(classMobile)) { + navBtn.setAttribute('aria-expanded', 'false') + } + else { + navBtn.setAttribute('aria-expanded', 'true') + } + menuHeader.classList.toggle(classMobile) + }); + + dropdownBtns.forEach((dropdownBtn) => { + dropdownBtn.addEventListener("click", function(){ + this.href = "javascript:void(0)" + + if(this.getAttribute('aria-expanded') == "true") { + this.setAttribute('aria-expanded', 'false') + } + else { + this.setAttribute('aria-expanded', 'true') + } + }) + }) + } + }) +}); + + + + diff --git a/assets/sass/_theme/design-system/a11y.sass b/assets/sass/_theme/design-system/a11y.sass index 24b7c0d3..0ce65765 100644 --- a/assets/sass/_theme/design-system/a11y.sass +++ b/assets/sass/_theme/design-system/a11y.sass @@ -2,7 +2,7 @@ @include list-reset padding: $spacing1 position: absolute - transform: translateY(-100%) + transform: translateY(calc(-100% - 24px)) z-index: $zindex-nav-accessibility li display: inline-block diff --git a/assets/sass/_theme/design-system/header.sass b/assets/sass/_theme/design-system/header.sass index e44d1c93..21118dee 100644 --- a/assets/sass/_theme/design-system/header.sass +++ b/assets/sass/_theme/design-system/header.sass @@ -16,12 +16,17 @@ header[role="banner"] .container align-items: center display: flex + flex-wrap: wrap justify-content: space-between button[type="button"] + @include button-reset display: none border: 0 color: $body-color position: relative + @include media-breakpoint-down(md) + display: flex + align-items: center &:focus box-shadow: none &:focus-visible @@ -33,6 +38,7 @@ header[role="banner"] font-size: px2rem(14) text-transform: uppercase span:last-of-type + @include icon("burger", before) background: none height: calc(1.063rem + .3125rem * 2) padding: px2rem(5) 0 px2rem(5) px2rem(5) @@ -49,3 +55,5 @@ header[role="banner"] img height: 20px width: auto + + \ No newline at end of file diff --git a/assets/sass/_theme/design-system/nav.sass b/assets/sass/_theme/design-system/nav.sass index 896077d2..d12d0857 100644 --- a/assets/sass/_theme/design-system/nav.sass +++ b/assets/sass/_theme/design-system/nav.sass @@ -1,4 +1,12 @@ .menu + @include media-breakpoint-down(md) + -webkit-flex-basis: 100vw + display: none + flex-basis: 100vw + margin-top: 1.875rem + max-height: 70vh + overflow: auto + a, a:hover, a:focus, @@ -23,11 +31,14 @@ background: $header-background-color padding-bottom: $spacing1 padding-top: $spacing1 - inset: 100% 0 auto 0 - position: absolute + @include media-breakpoint-up(md) + inset: 100% 0 auto 0 + position: absolute .nav-level-1 display: flex + @include media-breakpoint-down(md) + @include grid(1) > li > a padding: $spacing1 @@ -39,9 +50,10 @@ display: block .nav-level-2 + @include grid(1) @include media-breakpoint-up(md) @include container - @include grid(4, md) + @include grid(4, md) > li &, & > a, @@ -56,6 +68,37 @@ span font-size: px2rem(14) + &.show + flex-grow: 1 + display: block + a + text-decoration: none + .nav-level-1 + > li:not(:last-child) + border-bottom: 1px solid #adb5bd + li.has-children + a[role="button"] + align-items: center + display: flex + justify-content: space-between + padding: 1rem 0 + @include icon("caret-bottom", after) + &::after + font-size: .375rem + line-height: 1 + .dropdown-menu + display: none + padding-top: 0 + + a[aria-expanded=true] + @include icon("caret-top", after) + &:hover, + &:focus, + &:active + color: $header-color + + + .dropdown-menu + display: block .share display: flex -- GitLab