From e0b26b1032ca58d991788345871769421e431ad8 Mon Sep 17 00:00:00 2001 From: elisejakob Date: Thu, 27 Jun 2024 00:15:58 +0200 Subject: [PATCH] sticky menu fuckery --- web/src/components/layout/Header.tsx | 232 ++++++++++++------- web/src/components/layout/header.module.scss | 43 +++- web/src/css/base.scss | 1 - 3 files changed, 184 insertions(+), 92 deletions(-) diff --git a/web/src/components/layout/Header.tsx b/web/src/components/layout/Header.tsx index ba2c49c..501c8ed 100644 --- a/web/src/components/layout/Header.tsx +++ b/web/src/components/layout/Header.tsx @@ -5,8 +5,13 @@ import Link from "next/link"; import styles from "./header.module.scss"; import { Logo, LogoIcon } from "@/components/general/Logo"; import Icon from "../general/Icon"; +import { useInView } from "react-intersection-observer"; export const Header = () => { + const { ref: observer, inView: isScrolled } = useInView({ + triggerOnce: false, + }); + const [showMenu, setShowMenu] = useState(false); function toggleMenu() { setShowMenu(!showMenu); @@ -51,47 +56,19 @@ export const Header = () => { ); return ( -
- - - - -
+ +
+ ); }; diff --git a/web/src/components/layout/header.module.scss b/web/src/components/layout/header.module.scss index dfd9015..f802fbe 100644 --- a/web/src/components/layout/header.module.scss +++ b/web/src/components/layout/header.module.scss @@ -11,6 +11,40 @@ a { text-decoration: none; } + + &[data-small=true] { + .headerBar { + animation: slideDown .6s ease forwards; + } + } +} + +.headerBar { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 999; + background: var(--color-chateauBlue); + color: var(--color-white); + padding: .5rem var(--spacing-sitepadding-inline); + display: flex; + justify-content: space-between; + align-items: flex-start; + transform: translateY(-100%); + animation: slideUp .4s ease forwards; +} + +@keyframes slideDown { + to { + transform: translateY(0); + } +} + +@keyframes slideUp { + to { + transform: translateY(-100%); + } } .logo { @@ -103,7 +137,7 @@ margin-top: var(--spacing-m); } -.siteMenu[data-show=true] { +.header[data-show=true] { .mainMenu { animation: slideOutRight .3s ease-out forwards; } @@ -156,4 +190,11 @@ transform: translateX(0); opacity: 1; } +} + +// observer to trigger small menu +.observer { + position: absolute; + top: calc(100vh + 8rem); + height: calc(100% - 100vh - 8rem); } \ No newline at end of file diff --git a/web/src/css/base.scss b/web/src/css/base.scss index b8e7f94..02e80be 100644 --- a/web/src/css/base.scss +++ b/web/src/css/base.scss @@ -7,7 +7,6 @@ html { min-height: 100%; font-size: calc(1rem + 8 * (100vw - 320px) / 1920); - background-color: var(--color-chateauBlue); } html,