From b6a15f61f328784eb574ab7f2cd3c7c0f14084fb Mon Sep 17 00:00:00 2001 From: Giovanni-Josserand Date: Sun, 26 Oct 2025 20:44:54 +0100 Subject: [PATCH] creation of Header component --- src/components/Header/Header.jsx | 67 ++++++++ src/components/Header/Header.module.css | 147 ++++++++++++++++++ .../background/background.module.css | 5 +- src/index.css | 6 +- src/layout.jsx | 13 +- src/pages/Home/HomePage.jsx | 22 +++ 6 files changed, 250 insertions(+), 10 deletions(-) create mode 100644 src/components/Header/Header.jsx create mode 100644 src/components/Header/Header.module.css diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx new file mode 100644 index 0000000..27a83ca --- /dev/null +++ b/src/components/Header/Header.jsx @@ -0,0 +1,67 @@ +import styles from "./Header.module.css" +import {Link, NavLink} from "react-router"; +import {useEffect, useRef, useState} from "react"; + +function Header(){ + const [notificationMenu, setnotificationMenu] = useState(false); + const notificationRef = useRef(null); + + useEffect(() => { + const handleClickOutside = (event) => { + if (notificationRef.current && !notificationRef.current.contains(event.target) && !event.target.closest(`.${styles.bellBtn}`)) { + setnotificationMenu(false); + } + }; + + document.addEventListener("mousedown", handleClickOutside); + return () => { + document.removeEventListener("mousedown", handleClickOutside); + }; + }, []); + + + + return ( +
+
+ +
+
+

fhzi

+

fhzi

+

fhzi

+
+
+ ) +} + +export default Header; \ No newline at end of file diff --git a/src/components/Header/Header.module.css b/src/components/Header/Header.module.css new file mode 100644 index 0000000..3372ca4 --- /dev/null +++ b/src/components/Header/Header.module.css @@ -0,0 +1,147 @@ +.headerContainer { + position: relative; + height: fit-content; + overflow: visible; +} + + +.header{ + display: flex; + align-items: center; + padding: 0.8rem; + height: fit-content; + z-index: 2; +} + + +.headerContent { + display: flex; + justify-content: space-between; + width: 100%; +} + +.headerLeftContent { + display: flex; + width: fit-content; + align-items: center; + gap: 1.5rem; + font-size: 1.2rem; +} + +.headerRightContent { + width: fit-content; + display: flex; + align-items: center; + gap: 1rem; +} + +.logo { + height: 4rem; + width: auto; +} + +.link { + color: black; + width: fit-content; + text-align: center; + font-weight: bold; +} + +.link:hover { + color: #535bf2; +} + +.activeLink { + width: fit-content; + text-align: center; + font-weight: bold; + color: #019AFF; +} + + + + + +svg { + width: fit-content; +} + + + + +.bellBtn { + display: flex; + align-items: center; + justify-content: center; + border: none; + cursor: pointer; + transition: transform 0.5s ease; + background: none; + padding: 7px; + border-radius: 50%; + width: 75px; + height: 50px; + svg { + stroke: black; + stroke-width: 3.5; + stroke-linecap: round; + stroke-linejoin: round; + } +} + +.bellBtn:focus { + outline: none; +} +.bellBtn:focus-visible { + outline: 2px solid black; +} + +.activeBellBtn { + transform: translateY(-4px); + background: rgba(191, 191, 191, 0.5); + svg { + stroke: #019AFF; + } +} + +.bellBtn:hover { + transform: translateY(-4px); + background: rgba(191, 191, 191, 0.5); + svg { + stroke: #019AFF; + } +} + + + + +.profileLink { + display: flex; + align-items: center; + justify-content: center; + transition: transform 0.5s ease; +} + +.profileLink:hover { + transform: translateY(-4px); +} + + + + +.notificationDiv { + position: absolute; + width: 200px; + top: 105%; + right: 2rem; + opacity: 0; + transform: translateY(-10px); + transition: opacity 0.3s ease, transform 0.3s ease; + z-index: 1; +} + +.activeNotificationDiv { + opacity: 1; + transform: translateY(0); + z-index: 3; +} \ No newline at end of file diff --git a/src/components/background/background.module.css b/src/components/background/background.module.css index 41d0a05..9c009a5 100644 --- a/src/components/background/background.module.css +++ b/src/components/background/background.module.css @@ -1,5 +1,6 @@ /* BACKGROUND ////////////////////////////////////////////////////////*/ .background-container { + z-index: 0; margin: 0; padding: 0; min-height: 100vh; @@ -47,8 +48,8 @@ width: 500px; height: 500px; background-color: rgb(244, 244, 172); - bottom: 0%; - right: 0%; + bottom: 0; + right: 0; } .circle-5 { diff --git a/src/index.css b/src/index.css index 413d12d..a61b4fd 100644 --- a/src/index.css +++ b/src/index.css @@ -24,6 +24,7 @@ .content { padding: 1.5rem; + z-index: 1; } @@ -34,9 +35,6 @@ a { color: #646cff; text-decoration: inherit; } -a:hover { - color: #535bf2; -} body { margin: 0; @@ -51,7 +49,7 @@ body { .glassCard { width: 100%; padding: 10px 20px 10px 20px; - height: 360px; + height: fit-content; background: rgba(255, 255, 255, 0.65); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px); diff --git a/src/layout.jsx b/src/layout.jsx index 082488d..b159981 100644 --- a/src/layout.jsx +++ b/src/layout.jsx @@ -1,15 +1,20 @@ import { Outlet } from "react-router"; import Footer from "./components/Footer/Footer.jsx" +import Header from "./components/Header/Header.jsx"; +import Background from "./components/background/background.jsx"; function Layout(){ return (
-
- -
-
+ +
+
+ +
+
+
) } diff --git a/src/pages/Home/HomePage.jsx b/src/pages/Home/HomePage.jsx index fc12601..71b4a8e 100644 --- a/src/pages/Home/HomePage.jsx +++ b/src/pages/Home/HomePage.jsx @@ -4,6 +4,28 @@ function HomePage(){ return (
+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

+

jbgejin

) }