feat(andreknie.de): improve accessibility and initial loading
This commit is contained in:
@@ -13,7 +13,15 @@ export default function Navigation() {
|
||||
return () => window.removeEventListener('scroll', handleScroll)
|
||||
}, [])
|
||||
|
||||
// Close the mobile menu whenever navigation occurs.
|
||||
useEffect(() => {
|
||||
function handleKeyDown(event) {
|
||||
if (event.key === 'Escape') setMobileOpen(false)
|
||||
}
|
||||
|
||||
document.addEventListener('keydown', handleKeyDown)
|
||||
return () => document.removeEventListener('keydown', handleKeyDown)
|
||||
}, [])
|
||||
|
||||
function closeMenu() {
|
||||
setMobileOpen(false)
|
||||
}
|
||||
@@ -28,8 +36,10 @@ export default function Navigation() {
|
||||
{ to: '/kontakt', label: 'Kontakt' },
|
||||
]
|
||||
|
||||
const isActive = (path) => location.pathname === path || location.pathname.startsWith(`${path}/`)
|
||||
|
||||
return (
|
||||
<nav className={`navigation ${scrolled ? 'scrolled' : ''}`}>
|
||||
<nav className={`navigation ${scrolled ? 'scrolled' : ''}`} aria-label="Hauptnavigation">
|
||||
<div className="nav-container app-container">
|
||||
<Link to="/" className="logo" onClick={closeMenu}>
|
||||
<span className="logo-text">Dr. André Knie</span>
|
||||
@@ -40,18 +50,21 @@ export default function Navigation() {
|
||||
<Link
|
||||
key={link.to}
|
||||
to={link.to}
|
||||
className={`nav-link ${location.pathname === link.to ? 'active' : ''}`}
|
||||
className={`nav-link ${isActive(link.to) ? 'active' : ''}`}
|
||||
aria-current={isActive(link.to) ? 'page' : undefined}
|
||||
>
|
||||
{link.label}
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
|
||||
{/* Mobile hamburger (only visible on small screens) */}
|
||||
<button
|
||||
className={`hamburger ${mobileOpen ? 'active' : ''}`}
|
||||
onClick={() => setMobileOpen(!mobileOpen)}
|
||||
aria-label="Menü öffnen"
|
||||
onClick={() => setMobileOpen(open => !open)}
|
||||
aria-label={mobileOpen ? 'Menü schließen' : 'Menü öffnen'}
|
||||
aria-expanded={mobileOpen}
|
||||
aria-controls="mobile-navigation"
|
||||
type="button"
|
||||
>
|
||||
<span></span>
|
||||
<span></span>
|
||||
@@ -59,14 +72,14 @@ export default function Navigation() {
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Mobile dropdown */}
|
||||
<div className={`nav-mobile ${mobileOpen ? 'open' : ''}`}>
|
||||
<div id="mobile-navigation" className={`nav-mobile ${mobileOpen ? 'open' : ''}`}>
|
||||
{navLinks.map(link => (
|
||||
<Link
|
||||
key={link.to}
|
||||
to={link.to}
|
||||
className={`nav-mobile-link ${location.pathname === link.to ? 'active' : ''}`}
|
||||
className={`nav-mobile-link ${isActive(link.to) ? 'active' : ''}`}
|
||||
onClick={closeMenu}
|
||||
aria-current={isActive(link.to) ? 'page' : undefined}
|
||||
>
|
||||
{link.label}
|
||||
</Link>
|
||||
|
||||
Reference in New Issue
Block a user