From c7d8aba184436b3688d9307f48c7fba177f85ae5 Mon Sep 17 00:00:00 2001 From: Victor Westerlund Date: Thu, 27 Feb 2025 15:03:21 +0100 Subject: [PATCH] wip: 2025-02-27T15:03:12+0100 (1740664992) --- public/assets/css/pages/docs/header.css | 20 ++++++ public/assets/css/pages/docs/layout.css | 34 ++++++++++ public/assets/css/pages/examples.css | 16 ++++- public/assets/css/pages/features.css | 8 +++ public/assets/css/pages/index.css | 14 ++++ public/assets/css/shell.css | 39 ++++++----- .../css/snippets/HTMLCodeDemoElement.css | 10 +++ .../css/snippets/HTMLNavMenuElement.css | 61 ++++++++++++++++++ public/assets/css/snippets/split.css | 21 ++++++ public/assets/js/pages/docs/layout.js | 9 +++ public/assets/js/shell.js | 9 +++ .../assets/js/snippets/HTMLNavMenuElement.mjs | 36 +++++++++++ public/assets/media/icons/hamburger.svg | 1 + public/assets/media/img/genemate-se.avif | Bin 0 -> 11425 bytes public/assets/media/img/icellate-com.avif | Bin 9108 -> 8392 bytes public/docs/header.php | 6 +- public/docs/v3.1.4/Reference/layout.php | 3 +- public/docs/v3.1.4/layout.php | 3 +- public/examples.php | 18 ++++-- public/shell.php | 10 +++ .../HTMLNavMenuElement/HTMLNavMenuElement.php | 61 ++++++++++++++++++ 21 files changed, 355 insertions(+), 24 deletions(-) create mode 100644 public/assets/css/snippets/HTMLNavMenuElement.css create mode 100644 public/assets/js/pages/docs/layout.js create mode 100644 public/assets/js/snippets/HTMLNavMenuElement.mjs create mode 100644 public/assets/media/icons/hamburger.svg create mode 100644 public/assets/media/img/genemate-se.avif create mode 100644 snippets/HTMLNavMenuElement/HTMLNavMenuElement.php diff --git a/public/assets/css/pages/docs/header.css b/public/assets/css/pages/docs/header.css index 3ac4427..f8c81e2 100644 --- a/public/assets/css/pages/docs/header.css +++ b/public/assets/css/pages/docs/header.css @@ -63,4 +63,24 @@ section.header button.inline { section.header button.inline.solid { color: var(--color-accent); background-color: white; +} + +/* ## Menu */ + +section.header button.menu { + display: none; +} + +/* # Size queries */ + +@media (max-width: 950px) { + section.header > *:not(button.menu) { + display: none; + } + + section.header button.menu { + width: 100%; + justify-content: center; + display: flex; + } } \ No newline at end of file diff --git a/public/assets/css/pages/docs/layout.css b/public/assets/css/pages/docs/layout.css index 3a28f56..5ce738f 100644 --- a/public/assets/css/pages/docs/layout.css +++ b/public/assets/css/pages/docs/layout.css @@ -52,4 +52,38 @@ section.md { section.md :is(ol, ul) li { margin: calc(var(--padding) / 2) 0; +} + +/* # Size queries */ + +@media (max-width: 950px) { + vv-shell { + grid-template-rows: calc(var(--running-size) - var(--padding)) 1fr var(--running-size); + grid-template-areas: + "header" + "main" + "footer" + ; + grid-template-columns: 100svw; + } + + aside { + display: none; + } + + vv-shell.menu-open { + grid-template-areas: + "header" + "aside" + "footer" + ; + } + + vv-shell.menu-open aside { + display: initial; + } + + vv-shell.menu-open main { + display: none; + } } \ No newline at end of file diff --git a/public/assets/css/pages/examples.css b/public/assets/css/pages/examples.css index 3e93239..01e6438 100644 --- a/public/assets/css/pages/examples.css +++ b/public/assets/css/pages/examples.css @@ -1,5 +1,6 @@ vv-shell { gap: var(--padding); + padding: var(--padding); } /* # Sections */ @@ -8,7 +9,6 @@ vv-shell { section.heading { text-align: center; - margin: var(--padding) 0; } /* ## Grid */ @@ -39,4 +39,18 @@ section.grid button > div { section.grid button p { color: black; +} + +/* # Size queries */ + +@media (max-width: 1000px) { + section.grid { + grid-template-columns: repeat(2, 1fr); + } +} + +@media (max-width: 550px) { + section.grid { + grid-template-columns: 1fr; + } } \ No newline at end of file diff --git a/public/assets/css/pages/features.css b/public/assets/css/pages/features.css index 16325e5..ae1da35 100644 --- a/public/assets/css/pages/features.css +++ b/public/assets/css/pages/features.css @@ -21,4 +21,12 @@ section#this-stays svg { section#this-stays svg:last-child { transform: rotateY(180deg); +} + +/* # Size queries */ + +@media (max-width: 950px) { + section#this-stays { + height: calc(var(--running-size) * 2); + } } \ No newline at end of file diff --git a/public/assets/css/pages/index.css b/public/assets/css/pages/index.css index aa0d13e..ae129ec 100644 --- a/public/assets/css/pages/index.css +++ b/public/assets/css/pages/index.css @@ -1,4 +1,5 @@ vv-shell { + overflow-x: hidden; padding: 0 var(--padding); } @@ -59,4 +60,17 @@ section#intro div.compass svg:nth-child(2) { section#freedom > div > svg { height: 300px; +} + +/* # Size queries */ + +@media (max-width: 950px) { + section#intro { + min-height: min(40svh, 1000px); + } + + section#intro div.compass { + opacity: .3; + z-index: -1; + } } \ No newline at end of file diff --git a/public/assets/css/shell.css b/public/assets/css/shell.css index d46c612..2993f92 100644 --- a/public/assets/css/shell.css +++ b/public/assets/css/shell.css @@ -39,14 +39,14 @@ body::before { content: ""; position: absolute; top: -5%; - right: 0; + left: 0; width: 20%; height: 5%; border-radius: 100%; z-index: 1000; box-shadow: - 0 0 30svh 10svh rgba(var(--primer-color-accent), .2), - 0 0 30svh 60svh rgba(var(--primer-color-accent), .1), + 0 0 30svh 10svh rgba(var(--primer-color-accent), .1), + 0 0 30svh 60svh rgba(var(--primer-color-accent), .05), 0 0 30svh 150svh rgba(var(--primer-color-accent), .02) ; opacity: 0; @@ -66,7 +66,7 @@ a { /* ## vv-shell */ vv-shell { - width: 100%; + width: 100svw; display: flex; max-width: 1500px; position: relative; @@ -134,6 +134,10 @@ button { cursor: pointer; } +button * { + pointer-events: none; +} + /* ### Inline */ button.inline { @@ -230,6 +234,10 @@ header nav:last-of-type { gap: calc(var(--padding) / 2); } +:is(header, footer) nav.m { + display: none; +} + /* ### Spacer */ header nav > div { @@ -358,20 +366,19 @@ footer button.inline.solid { /* # Size queries */ -@media (min-width: 700px) { - :root { - --header-search-size: 250px; +@media (max-width: 950px) { + footer, + header { + grid-template-columns: var(--running-size) 1fr; } - /* # Cornerstones */ + :is(header, footer) nav.m { + display: flex; + padding-left: calc(var(--padding) / 2); + justify-content: space-between; + } - body::before { - right: unset; - left: 0; - box-shadow: - 0 0 30svh 10svh rgba(var(--primer-color-accent), .1), - 0 0 30svh 60svh rgba(var(--primer-color-accent), .05), - 0 0 30svh 150svh rgba(var(--primer-color-accent), .02) - ; + :is(header, footer) nav:not(.m) { + display: none; } } \ No newline at end of file diff --git a/public/assets/css/snippets/HTMLCodeDemoElement.css b/public/assets/css/snippets/HTMLCodeDemoElement.css index c0039d2..2b8052b 100644 --- a/public/assets/css/snippets/HTMLCodeDemoElement.css +++ b/public/assets/css/snippets/HTMLCodeDemoElement.css @@ -14,6 +14,7 @@ code-demo { code-demo .header { display: flex; + overflow-x: scroll; height: var(--height); border-bottom: solid 1px rgba(255, 255, 255, .1); } @@ -90,4 +91,13 @@ code-demo .body [data-file] { code-demo .body [data-file].active { display: initial; +} + +/* # Size queries */ + +@media (max-width: 950px) { + code-demo { + width: 100%; + min-width: unset; + } } \ No newline at end of file diff --git a/public/assets/css/snippets/HTMLNavMenuElement.css b/public/assets/css/snippets/HTMLNavMenuElement.css new file mode 100644 index 0000000..428a8b2 --- /dev/null +++ b/public/assets/css/snippets/HTMLNavMenuElement.css @@ -0,0 +1,61 @@ +nav-menu { + display: none; +} + +@media (max-width: 950px) { + /* # Overrides */ + + body.menu-open { + overflow: hidden; + } + + /* ## Header */ + + body.menu-open header { + background-color: var(--color-accent); + } + + body.menu-open header nav p { + color: white; + } + + /* # Nav menu */ + + nav-menu { + top: var(--running-size); + left: 0; + width: 100%; + overflow-y: scroll; + height: calc(100svh - var(--running-size)); + display: none; + position: fixed; + align-items: center; + flex-direction: column; + background-color: white; + } + + nav-menu.active { + display: flex; + } + + /* ## Sections */ + + nav-menu nav { + gap: calc(var(--padding) / 2); + width: 100%; + max-width: 600px; + display: flex; + padding: var(--padding); + flex-direction: column; + } + + nav-menu nav:last-child { + margin-top: auto; + } + + nav-menu nav.horizontal { + gap: var(--padding); + flex-direction: row; + justify-content: center; + } +} \ No newline at end of file diff --git a/public/assets/css/snippets/split.css b/public/assets/css/snippets/split.css index ffc102e..d69d691 100644 --- a/public/assets/css/snippets/split.css +++ b/public/assets/css/snippets/split.css @@ -47,4 +47,25 @@ section.split .buttons { display: flex; gap: var(--padding); margin-top: var(--padding); +} + +/* # Size queries */ + +@media (max-width: 950px) { + section.split { + display: flex; + margin: 5svh 0; + gap: var(--padding); + flex-direction: column; + } + + section.split .text { + width: 100%; + } + + section.split .buttons { + width: 100%; + flex-direction: column; + gap: calc(var(--padding) / 2); + } } \ No newline at end of file diff --git a/public/assets/js/pages/docs/layout.js b/public/assets/js/pages/docs/layout.js new file mode 100644 index 0000000..6a1960d --- /dev/null +++ b/public/assets/js/pages/docs/layout.js @@ -0,0 +1,9 @@ +// Toggle documentation menu with CSS when button in sub-header is clicked +document.querySelector("section.header button.menu").addEventListener("click", () => { + vegvisir.Navigation.shellElement.classList.toggle("menu-open"); +}); + +// Close documentation menu when shell is being navigated +vegvisir.Navigation.shellElement.addEventListener(vegvisir.Navigation.EVENTS.STARTED, () => { + vegvisir.Navigation.shellElement.classList.remove("menu-open"); +}); \ No newline at end of file diff --git a/public/assets/js/shell.js b/public/assets/js/shell.js index e69de29..f84c4a7 100644 --- a/public/assets/js/shell.js +++ b/public/assets/js/shell.js @@ -0,0 +1,9 @@ +import { TAG_NAME } from "/assets/js/snippets/HTMLNavMenuElement.mjs"; + +// Bind toggles for the nav menu +[...document.querySelectorAll("[data-menu]")].forEach(element => { + element.addEventListener("click", () => document.querySelector(TAG_NAME).toggle()); +}); + +// Scroll page to the top on navigations +document.addEventListener(vegvisir.Navigation.EVENTS.FINISHED, () => window.scrollTo({ top: 0 })); \ No newline at end of file diff --git a/public/assets/js/snippets/HTMLNavMenuElement.mjs b/public/assets/js/snippets/HTMLNavMenuElement.mjs new file mode 100644 index 0000000..61b6eb2 --- /dev/null +++ b/public/assets/js/snippets/HTMLNavMenuElement.mjs @@ -0,0 +1,36 @@ +import { CustomElement } from "../CustomElement.mjs"; + +export const TAG_NAME = "nav-menu"; + +class HTMLNavMenuElement extends CustomElement { + constructor() { + super(); + + this.importElementStylesheet(this.constructor.name); + } + + open() { + document.body.classList.add("menu-open"); + this.classList.add("active"); + } + + close() { + this.classList.remove("active"); + + // Remove classname from body tag if this was the last menu that was open + if (!document.querySelector(TAG_NAME + ".active")) { + document.body.classList.remove("menu-open"); + } + } + + toggle() { + this.classList.contains("active") ? this.close() : this.open(); + } + + connected() { + // Close menu when a link is clicked + [...document.querySelectorAll("a")].forEach(element => element.addEventListener("click", () => this.close())); + } +} + +globalThis.customElements.define(TAG_NAME, HTMLNavMenuElement); \ No newline at end of file diff --git a/public/assets/media/icons/hamburger.svg b/public/assets/media/icons/hamburger.svg new file mode 100644 index 0000000..bfa139a --- /dev/null +++ b/public/assets/media/icons/hamburger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/public/assets/media/img/genemate-se.avif b/public/assets/media/img/genemate-se.avif new file mode 100644 index 0000000000000000000000000000000000000000..ad2eb348c50b9f0ed27254a582a08e29240d9565 GIT binary patch literal 11425 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 literal 0 HcmV?d00001 diff --git a/public/assets/media/img/icellate-com.avif b/public/assets/media/img/icellate-com.avif index 11e7c211e30c5932de026fd6546e83ed15549518..67b403f7e867581b7d3d667f6ff0c2ba35f8ee8e 100644 GIT binary patch delta 8207 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 vxuEdixssDJavaScript

+ \ No newline at end of file diff --git a/public/docs/v3.1.4/Reference/layout.php b/public/docs/v3.1.4/Reference/layout.php index 0eef26a..c0b0ffe 100644 --- a/public/docs/v3.1.4/Reference/layout.php +++ b/public/docs/v3.1.4/Reference/layout.php @@ -1,3 +1,4 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/public/docs/v3.1.4/layout.php b/public/docs/v3.1.4/layout.php index 0cf2d6a..425b1fa 100644 --- a/public/docs/v3.1.4/layout.php +++ b/public/docs/v3.1.4/layout.php @@ -1,3 +1,4 @@ - \ No newline at end of file + + \ No newline at end of file diff --git a/public/examples.php b/public/examples.php index 0d9d5fc..3b2d1f2 100644 --- a/public/examples.php +++ b/public/examples.php @@ -4,17 +4,17 @@

Here are some examples of Vegvisir being used on real websites!

- - - +
\ No newline at end of file diff --git a/public/shell.php b/public/shell.php index 35f259b..cacdbac 100644 --- a/public/shell.php +++ b/public/shell.php @@ -54,6 +54,14 @@
+ + + + + + \ No newline at end of file