Browse Source

nav resize + breakpoints

master
rdrew 3 weeks ago
parent
commit
51cdc18e76
  1. 6
      css/components/header-buttons-mobile.css
  2. 26
      css/components/header-navigation.css
  3. 27
      css/components/navigation/nav-primary-button.css
  4. 72
      css/components/navigation/nav-primary-wide.css
  5. 2
      olivescraipe.libraries.yml

6
css/components/header-buttons-mobile.css

@ -27,13 +27,15 @@
} }
} }
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
.mobile-buttons { .mobile-buttons {
margin-block-start: var(--sp6); margin-block-start: var(--sp6);
} }
} }
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
body:not(.is-always-mobile-nav) .mobile-buttons { body:not(.is-always-mobile-nav) .mobile-buttons {
display: none; display: none;
} }

26
css/components/header-navigation.css

@ -30,14 +30,17 @@
* mobile navigation needs to slide beneath the button, but we also cannot * mobile navigation needs to slide beneath the button, but we also cannot
* use padding because that would enable the button to scroll out of the * use padding because that would enable the button to scroll out of the
* viewport on short screens. */ * viewport on short screens. */
border-block-start: solid var(--color--white) calc(var(--sp3) + var(--drupal-displace-offset-top, 0px)); border-block-start: solid var(--color--white)
calc(var(--sp3) + var(--drupal-displace-offset-top, 0px));
background-color: var(--color--white); background-color: var(--color--white);
box-shadow: 0 0 72px rgba(0, 0, 0, 0.1); box-shadow: 0 0 72px rgba(0, 0, 0, 0.1);
} }
.header-nav.is-active { .header-nav.is-active {
visibility: visible; visibility: visible;
transform: translateX(calc(-100% - var(--drupal-displace-offset-right, 0px))); /* LTR */ transform: translateX(
calc(-100% - var(--drupal-displace-offset-right, 0px))
); /* LTR */
} }
[dir="rtl"] .header-nav.is-active { [dir="rtl"] .header-nav.is-active {
@ -83,7 +86,8 @@ html.js .header-nav {
transition: visibility 0.2s, transform 0.2s; transition: visibility 0.2s, transform 0.2s;
} }
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
body:not(.is-always-mobile-nav) .header-nav { body:not(.is-always-mobile-nav) .header-nav {
position: static; position: static;
display: flex; display: flex;
@ -105,20 +109,28 @@ html.js .header-nav {
} }
} }
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
body.is-always-mobile-nav .header-nav { body.is-always-mobile-nav .header-nav {
overflow: auto; overflow: auto;
max-width: calc((7 * (var(--grid-col-width) + var(--grid-gap)))); max-width: calc((7 * (var(--grid-col-width) + var(--grid-gap))));
padding-inline-end: var(--sp); padding-inline-end: var(--sp);
transition: transform 0.2s, visibility 0.2s; transition: transform 0.2s, visibility 0.2s;
border-top-width: calc(var(--drupal-displace-offset-top, 0px) + var(--sp11)); border-top-width: calc(
var(--drupal-displace-offset-top, 0px) + var(--sp11)
);
} }
} }
@media (min-width: 90rem) { @media (min-width: 90rem) {
body.is-always-mobile-nav .header-nav { body.is-always-mobile-nav .header-nav {
max-width: calc(100vw - (var(--max-width) + var(--content-left)) + ((7 * (var(--grid-col-width) + var(--grid-gap))))); max-width: calc(
padding-inline-end: calc(100vw - (var(--max-width) + var(--content-left) - var(--sp))); 100vw - (var(--max-width) + var(--content-left)) +
((7 * (var(--grid-col-width) + var(--grid-gap))))
);
padding-inline-end: calc(
100vw - (var(--max-width) + var(--content-left) - var(--sp))
);
} }
} }

27
css/components/navigation/nav-primary-button.css

@ -15,7 +15,9 @@
overflow: hidden; overflow: hidden;
width: var(--sp2); width: var(--sp2);
height: var(--sp2); height: var(--sp2);
margin-block-start: var(--sp0-5); /* Visually align button with menu link text. */ margin-block-start: var(
--sp0-5
); /* Visually align button with menu link text. */
padding-block: 0; padding-block: 0;
padding-inline-start: 0; padding-inline-start: 0;
padding-inline-end: 0; padding-inline-end: 0;
@ -76,7 +78,8 @@
pointer-events: none; pointer-events: none;
} }
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
body:not(.is-always-mobile-nav) .primary-nav__button-toggle { body:not(.is-always-mobile-nav) .primary-nav__button-toggle {
flex-shrink: 0; flex-shrink: 0;
align-self: stretch; align-self: stretch;
@ -91,7 +94,9 @@
outline: 0; outline: 0;
} }
body:not(.is-always-mobile-nav) .primary-nav__button-toggle:focus .icon--menu-toggle { body:not(.is-always-mobile-nav)
.primary-nav__button-toggle:focus
.icon--menu-toggle {
border: solid 2px var(--color--primary-40); border: solid 2px var(--color--primary-40);
} }
@ -100,11 +105,15 @@
color: currentColor; color: currentColor;
} }
body:not(.is-always-mobile-nav) .primary-nav__button-toggle[aria-expanded="true"] .icon--menu-toggle::after { body:not(.is-always-mobile-nav)
.primary-nav__button-toggle[aria-expanded="true"]
.icon--menu-toggle::after {
opacity: 0.8; opacity: 0.8;
} }
body:not(.is-always-mobile-nav) .primary-nav__button-toggle .icon--menu-toggle { body:not(.is-always-mobile-nav)
.primary-nav__button-toggle
.icon--menu-toggle {
inset-inline-start: 0.1875rem; inset-inline-start: 0.1875rem;
width: 1.125rem; width: 1.125rem;
transform: translateY(-50%); transform: translateY(-50%);
@ -112,11 +121,15 @@
background-color: var(--color--white); background-color: var(--color--white);
} }
body:not(.is-always-mobile-nav) .primary-nav__button-toggle .icon--menu-toggle::before { body:not(.is-always-mobile-nav)
.primary-nav__button-toggle
.icon--menu-toggle::before {
content: none; content: none;
} }
body:not(.is-always-mobile-nav) .primary-nav__button-toggle .icon--menu-toggle::after { body:not(.is-always-mobile-nav)
.primary-nav__button-toggle
.icon--menu-toggle::after {
/* stylelint-disable csstools/use-logical */ /* stylelint-disable csstools/use-logical */
top: calc(50% - 2px); top: calc(50% - 2px);
left: 0.1875rem; left: 0.1875rem;

72
css/components/navigation/nav-primary-wide.css

@ -10,17 +10,25 @@
* Nav Primary (wide widths). * Nav Primary (wide widths).
*/ */
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
body:not(.is-always-mobile-nav) .primary-nav__menu-item { body:not(.is-always-mobile-nav) .primary-nav__menu-item {
flex-wrap: nowrap; /* Ensure that sub navigation toggle button doesn't wrap underneath link. */ flex-wrap: nowrap; /* Ensure that sub navigation toggle button doesn't wrap underneath link. */
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-item.primary-nav__menu-item--has-children .primary-nav__menu-link--link, body:not(.is-always-mobile-nav)
body:not(.is-always-mobile-nav) .primary-nav__menu-item.primary-nav__menu-item--has-children .primary-nav__menu-link--nolink { .primary-nav__menu-item.primary-nav__menu-item--has-children
.primary-nav__menu-link--link,
body:not(.is-always-mobile-nav)
.primary-nav__menu-item.primary-nav__menu-item--has-children
.primary-nav__menu-link--nolink {
flex-basis: auto; flex-basis: auto;
} }
/* Remove hover state if submenu exists. */ /* Remove hover state if submenu exists. */
body:not(.is-always-mobile-nav) .primary-nav__menu-item.primary-nav__menu-item--has-children .primary-nav__menu-link--level-1 .primary-nav__menu-link-inner::after { body:not(.is-always-mobile-nav)
.primary-nav__menu-item.primary-nav__menu-item--has-children
.primary-nav__menu-link--level-1
.primary-nav__menu-link-inner::after {
content: none; content: none;
} }
@ -46,22 +54,26 @@
border: solid 2px var(--color--primary-50); border: solid 2px var(--color--primary-50);
border-radius: 0.25rem; border-radius: 0.25rem;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--button.primary-nav__menu-link--has-children { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--button.primary-nav__menu-link--has-children {
overflow: visible; /* Necessary to view icon in IE11 */ overflow: visible; /* Necessary to view icon in IE11 */
padding-inline-end: 0.5625rem; padding-inline-end: 0.5625rem;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--button.primary-nav__menu-link--has-children:focus::before { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--button.primary-nav__menu-link--has-children:focus::before {
width: calc(100% + var(--sp1-5)); width: calc(100% + var(--sp1-5));
content: ""; content: "";
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--button.primary-nav__menu-link--has-children::before { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--button.primary-nav__menu-link--has-children::before {
content: none; content: none;
} }
/* Chevron icon for desktop navigation. */ /* Chevron icon for desktop navigation. */
body:not(.is-always-mobile-nav) .primary-nav__menu-link--button.primary-nav__menu-link--has-children::after { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--button.primary-nav__menu-link--has-children::after {
position: absolute; position: absolute;
inset-block-start: 50%; inset-block-start: 50%;
inset-inline-start: calc(100% - 0.1875rem); inset-inline-start: calc(100% - 0.1875rem);
@ -75,7 +87,8 @@
border-bottom: solid 2px currentColor; border-bottom: solid 2px currentColor;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--button.primary-nav__menu-link--has-children[aria-expanded="true"]::after { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--button.primary-nav__menu-link--has-children[aria-expanded="true"]::after {
opacity: 1; opacity: 1;
} }
@ -84,7 +97,7 @@
padding-inline-start: 0; padding-inline-start: 0;
padding-inline-end: 0; padding-inline-end: 0;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link-inner--level-3 { body:not(.is-always-mobile-nav) .primary-nav__menu-link-inner--level-3 {
padding-block: 0; padding-block: 0;
/*display:none;*/ /*display:none;*/
} }
@ -111,7 +124,8 @@
margin-inline-end: 0; margin-inline-end: 0;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-item--level-1:not(:last-child) { body:not(.is-always-mobile-nav)
.primary-nav__menu-item--level-1:not(:last-child) {
margin-inline-end: var(--sp2); margin-inline-end: var(--sp2);
} }
@ -125,7 +139,11 @@
width: 19.625rem; width: 19.625rem;
/* Ensure that long level-2 menus will never overflow viewport (focused /* Ensure that long level-2 menus will never overflow viewport (focused
* elements should always be in viewport per accessibility guidelines). */ * elements should always be in viewport per accessibility guidelines). */
max-height: calc(100vh - var(--site-header-height-wide) - var(--drupal-displace-offset-top, 0px) - var(--drupal-displace-offset-bottom, 0px) - var(--sp)); max-height: calc(
100vh - var(--site-header-height-wide) -
var(--drupal-displace-offset-top, 0px) -
var(--drupal-displace-offset-bottom, 0px) - var(--sp)
);
margin-block-start: 0; margin-block-start: 0;
margin-inline-start: 0; margin-inline-start: 0;
padding-block: calc(3 * var(--sp)); padding-block: calc(3 * var(--sp));
@ -145,10 +163,11 @@
border-radius: 0 0 2px 2px; border-radius: 0 0 2px 2px;
background: var(--color--white); background: var(--color--white);
box-shadow: 0 1px 36px rgba(0, 0, 0, 0.08); box-shadow: 0 1px 36px rgba(0, 0, 0, 0.08);
padding-block: 1rem; padding-block: 1rem;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu--level-2.is-active-menu-parent { body:not(.is-always-mobile-nav)
.primary-nav__menu--level-2.is-active-menu-parent {
visibility: visible; visibility: visible;
margin-block-start: 0; margin-block-start: 0;
transform: translate(-50%, 0); transform: translate(-50%, 0);
@ -159,25 +178,33 @@ padding-block: 1rem;
display: block; display: block;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--level-2:focus::before { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--level-2:focus::before {
top: 0; top: 0;
left: calc(var(--sp0-5) * -1); left: calc(var(--sp0-5) * -1);
height: 100%; height: 100%;
transform: none; transform: none;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--level-2 .primary-nav__menu-link-inner { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--level-2
.primary-nav__menu-link-inner {
padding-block: var(--sp0-5); padding-block: var(--sp0-5);
padding-inline-start: 0; padding-inline-start: 0;
padding-inline-end: 0; padding-inline-end: 0;
} }
body:not(.is-always-mobile-nav) .primary-nav__menu-link--level-2 .primary-nav__menu-link-inner::after { body:not(.is-always-mobile-nav)
.primary-nav__menu-link--level-2
.primary-nav__menu-link-inner::after {
transform-origin: left; /* LTR */ transform-origin: left; /* LTR */
border-top-width: 3px; border-top-width: 3px;
} }
[dir="rtl"] body:not(.is-always-mobile-nav) .primary-nav__menu-link--level-2 .primary-nav__menu-link-inner::after { [dir="rtl"]
body:not(.is-always-mobile-nav)
.primary-nav__menu-link--level-2
.primary-nav__menu-link-inner::after {
transform-origin: right; transform-origin: right;
} }
@ -212,7 +239,11 @@ padding-block: 1rem;
* little extra room when the toolbar is fixed (and is shorter). * little extra room when the toolbar is fixed (and is shorter).
*/ */
body:not(.is-always-mobile-nav) .is-fixed .primary-nav__menu--level-2 { body:not(.is-always-mobile-nav) .is-fixed .primary-nav__menu--level-2 {
max-height: calc(100vh - var(--site-header-height-wide) - var(--drupal-displace-offset-top, 0px) - var(--drupal-displace-offset-bottom, 0px) - var(--sp) + var(--sp4)); max-height: calc(
100vh - var(--site-header-height-wide) -
var(--drupal-displace-offset-top, 0px) -
var(--drupal-displace-offset-bottom, 0px) - var(--sp) + var(--sp4)
);
} }
} }
@ -221,7 +252,8 @@ padding-block: 1rem;
* works around https://bugs.chromium.org/p/chromium/issues/detail?id=332189 * works around https://bugs.chromium.org/p/chromium/issues/detail?id=332189
*/ */
@media ((((min-width: 60rem)))) { /* @media ((((min-width: 60rem)))) { */
@media ((((min-width: 1300px)))) {
html.js body:not(.is-always-mobile-nav) .primary-nav__menu--level-2, html.js body:not(.is-always-mobile-nav) .primary-nav__menu--level-2,
html.js body:not(.is-always-mobile-nav) .primary-nav__menu-🥕 { html.js body:not(.is-always-mobile-nav) .primary-nav__menu-🥕 {
transition: visibility 0.2s, transform 0.2s, opacity 0.2s; transition: visibility 0.2s, transform 0.2s, opacity 0.2s;

2
olivescraipe.libraries.yml

@ -242,7 +242,7 @@ navigation-primary:
js: js:
js/navigation.js: {} js/navigation.js: {}
js/second-level-navigation.js: {} js/second-level-navigation.js: {}
js/nav-resize.js: {} # js/nav-resize.js: {}
dependencies: dependencies:
- olivescraipe/navigation-base - olivescraipe/navigation-base

Loading…
Cancel
Save