Skip to content

Commit

Permalink
Merge pull request #1 from merkle-open/feature/header-footer
Browse files Browse the repository at this point in the history
feat: update header and footer blocks
  • Loading branch information
bchristiani authored Mar 27, 2024
2 parents 6afeb84 + 58c0d63 commit c890eb4
Show file tree
Hide file tree
Showing 5 changed files with 171 additions and 41 deletions.
102 changes: 100 additions & 2 deletions blocks/footer/footer.css
Original file line number Diff line number Diff line change
@@ -1,14 +1,112 @@
footer {
padding: 2rem;
background-color: var(--light-color);
background-color: var(--highlight-background-color);
color: var(--background-color);
font-size: var(--body-font-size-s);
}

footer .footer {
max-width: 1200px;
margin: auto;
margin: 0 auto;
}

footer .footer > div {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}

footer .footer > div > div:not(:first-of-type) {
margin-left: 20px;
}

footer .footer h2,
footer .footer h3,
footer .footer h4,
footer .footer h5,
footer .footer h6 {
color: var(--background-color);
}

footer .footer p {
margin: 10px 0;
font-size: var(--body-font-size-xs);
}

footer .footer .footer-tag-line {
width: 100%;
order: -2;
text-align: center;
flex-grow: 1;
}

footer .footer .footer-social {
order: -1;
width: 100%;
flex-grow: 1;
margin: 20px 0;
display: flex;
gap: 0 20px;
}

footer .footer .footer-social .icon {
display: block;
box-sizing: border-box;
padding: 8px;
margin: 0;
width: 32px;
height: 32px;
background-color: var(--highlight-color);
}

footer .footer select {
margin: 10px 0 6px -4px;
font-weight: normal;
}

footer .footer a:any-link {
color: var(--background-color);
}

footer .footer h2 {
display: inline-block;
font-size: var(--heading-font-size-m);
line-height: 1;
padding-left: 10px;
}

footer .footer h2::before {
border-top-width: 8px;
border-left-width: 8px;
top: 12px;
}

@media (width >= 600px) {
footer .footer .footer-social {
width: 100px;
order: unset;
flex-grow: unset;
flex-wrap: wrap;
}

@media (width >= 1200px) {
footer .footer .footer-tag-line {
width: initial;
order: unset;
flex-grow: unset;
flex-wrap: wrap;
}

footer .footer h2 {
font-size: var(--heading-font-size-xl);
line-height: 1.2;
padding-left: 24px;
}

footer .footer h2::before {
border-top-width: 20px;
border-left-width: 20px;
top: 18px;
}
}
}
11 changes: 11 additions & 0 deletions blocks/footer/footer.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { getMetadata } from '../../scripts/aem.js';
import { loadFragment } from '../fragment/fragment.js';
import { decorateLangSwitcher } from '../../scripts/scripts.js';

/**
* loads and decorates the footer
Expand All @@ -17,5 +18,15 @@ export default async function decorate(block) {
const footer = document.createElement('div');
while (fragment.firstElementChild) footer.append(fragment.firstElementChild);

// language switcher
decorateLangSwitcher(footer.querySelector('ul'));

block.append(footer);

// tag line
block.querySelector('.footer > div > div')
.classList.add('footer-tag-line');
// social icons
block.querySelector('.footer > div > div:last-of-type')
.classList.add('footer-social');
}
77 changes: 38 additions & 39 deletions blocks/header/header.css
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
/* header and nav layout */
header .nav-wrapper {
background-color: var(--background-color);
width: 100%;
z-index: 2;
position: fixed;
}

header nav {
box-sizing: border-box;
display: grid;
grid-template:
'hamburger brand tools' var(--nav-height)
'sections sections sections' 1fr / auto 1fr auto;
align-items: center;
gap: 0 2em;
margin: auto;
gap: 0 1em;
position: absolute;
left: 50%;
transform: translateX(-50%);
z-index: 1;
width: 100%;
max-width: 1264px;
height: var(--nav-height);
padding: 0 1rem;
color: var(--background-color);
background-color: var(--highlight-background-color);
font-family: var(--body-font-family);
}

Expand Down Expand Up @@ -71,7 +70,7 @@ header nav .nav-hamburger button {
border: 0;
border-radius: 0;
padding: 0;
background-color: var(--background-color);
background-color: var(--highlight-background-color);
color: inherit;
overflow: initial;
text-overflow: initial;
Expand Down Expand Up @@ -142,23 +141,20 @@ header nav[aria-expanded="true"] .nav-hamburger-icon::after {
header .nav-brand {
grid-area: brand;
flex-basis: 128px;
font-size: var(--heading-font-size-s);
font-size: var(--body-font-size-m);
font-weight: 700;
line-height: 1;
}

header nav .nav-brand img {
width: 128px;
height: auto;
header nav .nav-brand .icon img {
height: 44px;
}

/* sections */
header nav .nav-sections {
grid-area: sections;
flex: 1 1 auto;
display: none;
visibility: hidden;
background-color: var(--overlay-color);
}

header nav[aria-expanded="true"] .nav-sections {
Expand All @@ -170,23 +166,33 @@ header nav[aria-expanded="true"] .nav-sections {
header nav .nav-sections ul {
list-style: none;
padding-left: 0;
font-size: var(--body-font-size-s);
font-weight: 500;
}

header nav .nav-sections ul > li {
font-weight: 700;
font-size: var(--body-font-size-xs);
font-weight: 600;
}

header nav .nav-sections ul > li > ul {
margin-top: 0;
}

header nav .nav-sections ul > li > ul > li {
font-weight: 500;
/* tools */
header nav .nav-tools {
grid-area: tools;
display: none;
}

@media (width >= 1200px) {
header nav .nav-tools {
display: block;
border-left: solid 1px currentcolor;
}

}

@media (width >= 900px) {
header nav {
gap: 0 2em;
}

header nav .nav-sections {
display: block;
visibility: visible;
Expand All @@ -212,7 +218,6 @@ header nav .nav-sections ul > li > ul > li {
transform: rotate(135deg);
width: 6px;
height: 6px;
border: 2px solid currentcolor;
border-radius: 0 1px 0 0;
border-width: 2px 2px 0 0;
}
Expand All @@ -230,29 +235,28 @@ header nav .nav-sections ul > li > ul > li {
font-size: var(--body-font-size-xs);
}

header nav .nav-sections .default-content-wrapper > ul > li {
flex: 0 1 auto;
header nav .nav-sections > ul > li {
position: relative;
font-weight: 500;
margin-left: 35px;
}

header nav .nav-sections .default-content-wrapper > ul > li > ul {
header nav .nav-sections > ul > li > ul {
display: none;
position: relative;
}

header nav .nav-sections .default-content-wrapper > ul > li[aria-expanded="true"] > ul {
header nav .nav-sections > ul > li[aria-expanded="true"] > ul {
display: block;
position: absolute;
left: -1em;
width: 200px;
margin-top: 12px;
padding: 1em;
background-color: var(--light-color);
background-color: var(--highlight-background-color);
white-space: initial;
}

header nav .nav-sections .default-content-wrapper > ul > li > ul::before {
header nav .nav-sections > ul > li > ul::before {
content: '';
position: absolute;
top: -8px;
Expand All @@ -261,15 +265,10 @@ header nav .nav-sections ul > li > ul > li {
height: 0;
border-left: 8px solid transparent;
border-right: 8px solid transparent;
border-bottom: 8px solid var(--light-color);
border-bottom: 8px solid var(--highlight-background-color);
}

header nav .nav-sections .default-content-wrapper > ul > li > ul > li {
header nav .nav-sections > ul > li > ul > li {
padding: 8px 0;
}
}

/* tools */
header nav .nav-tools {
grid-area: tools;
}
4 changes: 4 additions & 0 deletions blocks/header/header.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { getMetadata } from '../../scripts/aem.js';
import { loadFragment } from '../fragment/fragment.js';
import { decorateLangSwitcher } from '../../scripts/scripts.js';

// media query match that indicates mobile/tablet width
const isDesktop = window.matchMedia('(min-width: 900px)');
Expand Down Expand Up @@ -141,6 +142,9 @@ export default async function decorate(block) {
toggleMenu(nav, navSections, isDesktop.matches);
isDesktop.addEventListener('change', () => toggleMenu(nav, navSections, isDesktop.matches));

// language switcher
decorateLangSwitcher(nav.querySelector('.nav-tools ul'));

const navWrapper = document.createElement('div');
navWrapper.className = 'nav-wrapper';
navWrapper.append(nav);
Expand Down
18 changes: 18 additions & 0 deletions scripts/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,24 @@ import {

const LCP_BLOCKS = []; // add your LCP blocks to the list

/**
* Transforms a list into a language switcher dropdown.
* @param {HTMLUListElement} list The list element
*/
export function decorateLangSwitcher(list) {
if (list) {
const select = document.createElement('select');
[...list.children].forEach(({ textContent }) => {
const option = document.createElement('option');
option.value = textContent;
option.textContent = textContent;
select.append(option);
});
select.className = 'lang-switcher';
list.replaceWith(select);
}
}

/**
* Builds hero block and prepends to main in a new section.
* @param {Element} main The container element
Expand Down

0 comments on commit c890eb4

Please sign in to comment.