feat(privat/CV): sync to latest upstream (cv-upstream/main, 30f9608b)
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
import { useEffect, useState } from 'react'
|
||||
import { Link, useLocation } from 'react-router-dom'
|
||||
import './Navigation.css'
|
||||
|
||||
export default function Navigation() {
|
||||
const [scrolled, setScrolled] = useState(false)
|
||||
const [mobileOpen, setMobileOpen] = useState(false)
|
||||
const location = useLocation()
|
||||
|
||||
useEffect(() => {
|
||||
const handleScroll = () => setScrolled(window.scrollY > 50)
|
||||
window.addEventListener('scroll', handleScroll)
|
||||
return () => window.removeEventListener('scroll', handleScroll)
|
||||
}, [])
|
||||
|
||||
// Close the mobile menu whenever navigation occurs.
|
||||
function closeMenu() {
|
||||
setMobileOpen(false)
|
||||
}
|
||||
|
||||
const navLinks = [
|
||||
{ to: '/kniepunkt', label: 'Kniepunkt' },
|
||||
{ to: '/podcast', label: 'Podcast' },
|
||||
{ to: '/speaking', label: 'Speaking' },
|
||||
{ to: '/consulting', label: 'Beratung' },
|
||||
{ to: '/ueber-mich', label: 'Über mich' },
|
||||
{ to: '/kontakt', label: 'Kontakt' },
|
||||
]
|
||||
|
||||
return (
|
||||
<nav className={`navigation ${scrolled ? 'scrolled' : ''}`}>
|
||||
<div className="nav-container app-container">
|
||||
<Link to="/" className="logo" onClick={closeMenu}>
|
||||
<span className="logo-text">Dr. André Knie</span>
|
||||
</Link>
|
||||
|
||||
<div className="nav-links">
|
||||
{navLinks.map(link => (
|
||||
<Link
|
||||
key={link.to}
|
||||
to={link.to}
|
||||
className={`nav-link ${location.pathname === link.to ? 'active' : ''}`}
|
||||
>
|
||||
{link.label}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Mobile hamburger (only visible on small screens) */}
|
||||
<button
|
||||
className={`hamburger ${mobileOpen ? 'active' : ''}`}
|
||||
onClick={() => setMobileOpen(!mobileOpen)}
|
||||
aria-label="Menü öffnen"
|
||||
>
|
||||
<span></span>
|
||||
<span></span>
|
||||
<span></span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Mobile dropdown */}
|
||||
<div className={`nav-mobile ${mobileOpen ? 'open' : ''}`}>
|
||||
{navLinks.map(link => (
|
||||
<Link
|
||||
key={link.to}
|
||||
to={link.to}
|
||||
className={`nav-mobile-link ${location.pathname === link.to ? 'active' : ''}`}
|
||||
onClick={closeMenu}
|
||||
>
|
||||
{link.label}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
</nav>
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user