media/css/protocol/components/_menu.scss (335 lines of code) (raw):

// This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this // file, You can obtain one at https://mozilla.org/MPL/2.0/. @import '~@mozilla-protocol/core/protocol/css/includes/lib'; @mixin highlighted { &::after { background: $color-black; bottom: -1px; content: ''; height: 3px; left: 0; position: absolute; width: 100%; @media #{$mq-md} { left: 8px; width: calc(100% - 16px); } @media #{$mq-lg} { left: 16px; width: calc(100% - 32px); } } } // * -------------------------------------------------------------------------- */ // Menu top navigation .c-menu { h1, h2, h3, h4, h5, h6 { font-family: var(--body-font-family); } @media #{$mq-md} { z-index: 0; } } .c-menu-category-list { margin-bottom: $spacing-sm; @media #{$mq-md} { @include clearfix; margin-bottom: 0; padding-top: $spacing-md; } } .c-menu-category { border-top: 1px solid $color-marketing-gray-20; position: relative; .c-menu-title { @include text-body-md; color: $color-black; display: block; font-family: var(--body-font-family); font-weight: bold; margin-bottom: 0; min-height: 32px; padding: $spacing-sm 0; position: relative; text-decoration: none; &:hover, &:active, &:focus { color: inherit; text-decoration: underline; } &:link:active { background: none; } } &.mzp-has-drop-down .c-menu-title { text-decoration: none; &::before { background: $url-image-arrow-down-form top left no-repeat; @include background-size(20px, 20px); @include bidi(((right, 8px, left, auto),)); @include transition(transform 100ms ease-in-out); content: ''; height: 20px; margin-top: -8px; position: absolute; top: 50%; width: 20px; } } @supports (display: flex) { .c-menu-title { align-items: center; display: flex; } } @media #{$mq-md} { @include bidi(((float, left, right),)); border-top: 0; display: inline-block; .c-menu-title { border-bottom: none; padding: 0 $spacing-sm; &.mzp-has-drop-down { cursor: default; } } &.mzp-has-drop-down .c-menu-title::before { display: none; } &.mzp-has-drop-down .c-menu-panel { @include bidi(((left, 0, auto), (right, auto, 0),)); } // Offset the dropdown to the other side for items 4 and up &:nth-child(n+4).mzp-has-drop-down .c-menu-panel { @include bidi(((left, auto, 0), (right, 0, auto),)); } } @media #{$mq-lg} { .c-menu-title { padding: 0 $spacing-md; } } } // Basic hover interactions with JavaScript disabled or not supported.. .c-menu.mzp-is-basic .c-menu-category { .c-menu-title::before { display: none; } @media #{$mq-md} { .c-menu-title::before { display: none; } &.mzp-has-drop-down:hover, &.mzp-has-drop-down:focus { .mzp-c-menu-title { @include highlighted; z-index: 1001; } .c-menu-panel { display: block; z-index: 1000; } } &.mzp-has-drop-down:focus-within { .c-menu-title { @include highlighted; z-index: 1001; } .c-menu-panel { display: block; z-index: 1000; } } } } // Enhanced hover interactions with JavaScript enabled. .c-menu.mzp-is-enhanced .c-menu-category { &.mzp-is-selected { .c-menu-title::before { @include transform(rotate(180deg)); } .c-menu-panel { display: block; overflow: hidden; } } @media #{$mq-md} { &.mzp-is-animated { .c-menu-panel, .c-menu-title::after { @include animation(mzp-a-fade-in 80ms ease-in 0ms 1 normal both); } } &.mzp-is-selected { .c-menu-title { @include highlighted; z-index: 101; } .c-menu-panel { display: block; overflow: visible; z-index: 100; } } } } // * -------------------------------------------------------------------------- */ // Menu panel .c-menu-panel { @include border-box; display: none; .c-menu-button-close { display: none; } .c-menu-category-link { border-top: 1px solid $color-marketing-gray-20; display: block; font-weight: bold; margin: $spacing-sm 0 $spacing-md; padding-top: $spacing-md; text-align: center; a:link, a:visited { color: $color-black; text-decoration: none; border-bottom: 2px solid transparent; &:hover, &:active, &:focus { @include transition(border-bottom-color 100ms ease-in-out); border-bottom: 2px solid $color-black; color: $color-black; } } } .c-menu-panel-container { @include border-box; background: $color-white; margin: 0 auto; max-width: $content-max; padding: 0; position: relative; } .c-menu-panel-content > ul { margin: 0; li:last-child .c-menu-item { border-bottom: 0; } } @media #{$mq-sm} { .c-menu-panel-content { @include clearfix; position: relative; @supports (display:grid) { & > ul { display: grid; grid-auto-flow: row; grid-template-columns: repeat(2, 1fr); &.mzp-l-rows-two { grid-auto-flow: column; grid-template-rows: repeat(2, max-content); } &.mzp-l-rows-three { grid-auto-flow: column; grid-template-rows: repeat(3, max-content); } &.mzp-l-rows-four { grid-auto-flow: column; grid-template-rows: repeat(4, max-content); } &.mzp-l-rows-five { grid-auto-flow: column; grid-template-rows: repeat(5, max-content); } } } } } @media #{$mq-md} { padding: $spacing-lg 0; position: absolute; z-index: 1000; .c-menu-panel-container { @include clearfix; background: $color-white; border-radius: $border-radius-md; box-shadow: $box-shadow-md; padding: $spacing-sm; } // Close button is only visible when focused, for keyboard users .c-menu-button-close { @include bidi(( (right, auto, -12px), (left, -12px, auto), )); @include image-replaced; background: $color-white url('#{$image-path}/icons/close.svg') center center no-repeat; @include background-size(20px, 20px); border-radius: $border-radius-sm; border: none; box-shadow: $box-shadow-sm; cursor: pointer; display: inline-block; height: 24px; padding: $spacing-sm; padding: 0; position: absolute; top: -40em; width: 24px; &:hover, &:focus, &:active { top: -10px; } } .c-menu-panel-content { @include clearfix; position: relative; & > ul { margin: 0; } // Undo the grid so items stack in one column on mid-size screens @supports (display:grid) { & > ul { display: block; } } } .c-menu-category-link { border-top: 0; } } @media #{$mq-lg} { .c-menu-panel-container { padding: $spacing-md; } .c-menu-panel-content { @include clearfix; position: relative; @supports (display:grid) { & > ul { display: grid; grid-auto-flow: row; grid-template-columns: repeat(2, 1fr); &.mzp-l-rows-two { grid-auto-flow: column; grid-template-rows: repeat(2, max-content); } &.mzp-l-rows-three { grid-auto-flow: column; grid-template-rows: repeat(3, max-content); } &.mzp-l-rows-four { grid-auto-flow: column; grid-template-rows: repeat(4, max-content); } &.mzp-l-rows-five { grid-auto-flow: column; grid-template-rows: repeat(5, max-content); } } } } } } .c-menu.mzp-is-basic .c-menu-panel { display: block; @media #{$mq-md} { display: none; } }