Skip to content

Commit 748936b

Browse files
committed
Fix - Hamburger is working now, manually implemented.
1 parent a125055 commit 748936b

File tree

3 files changed

+89
-3
lines changed

3 files changed

+89
-3
lines changed

layouts/_default/baseof.html

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@
4545
document.addEventListener('DOMContentLoaded', function() {
4646
const codeTabs = document.querySelectorAll('.code-tab');
4747
const codeExamples = document.querySelectorAll('.code-example');
48+
const mobileToggle = document.querySelector('.mobile-menu-toggle');
49+
const navbarMenu = document.querySelector('.navbar-menu');
4850

4951
codeTabs.forEach(tab => {
5052
tab.addEventListener('click', () => {
@@ -62,6 +64,38 @@
6264
}
6365
});
6466
});
67+
68+
// Mobile menu toggle
69+
if (mobileToggle && navbarMenu) {
70+
const setAria = (open) => {
71+
mobileToggle.setAttribute('aria-expanded', open ? 'true' : 'false');
72+
};
73+
setAria(false);
74+
75+
mobileToggle.addEventListener('click', () => {
76+
const isOpen = navbarMenu.classList.toggle('is-open');
77+
mobileToggle.classList.toggle('active', isOpen);
78+
setAria(isOpen);
79+
});
80+
81+
// Close menu when clicking a link (good UX)
82+
navbarMenu.addEventListener('click', (e) => {
83+
if (e.target instanceof Element && e.target.closest('a')) {
84+
navbarMenu.classList.remove('is-open');
85+
mobileToggle.classList.remove('active');
86+
setAria(false);
87+
}
88+
});
89+
90+
// Ensure menu resets when resizing to desktop
91+
window.addEventListener('resize', () => {
92+
if (window.innerWidth > 768) {
93+
navbarMenu.classList.remove('is-open');
94+
mobileToggle.classList.remove('active');
95+
setAria(false);
96+
}
97+
});
98+
}
6599
});
66100
</script>
67101
</body>

layouts/partials/header.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
</a>
88
</div>
99

10-
<div class="navbar-menu">
10+
<div class="navbar-menu" id="primary-navigation">
1111
<ul class="navbar-nav">
1212
{{ range .Site.Menus.main }}
1313
<li class="nav-item">
@@ -24,7 +24,7 @@
2424
</div>
2525

2626
<!-- Mobile menu button -->
27-
<button class="mobile-menu-toggle" aria-label="Toggle menu">
27+
<button class="mobile-menu-toggle" aria-label="Toggle menu" aria-controls="primary-navigation" aria-expanded="false">
2828
<span></span>
2929
<span></span>
3030
<span></span>

static/css/main.css

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ a:hover {
115115
align-items: center;
116116
justify-content: space-between;
117117
padding: var(--spacing-md) 0;
118+
position: relative;
118119
}
119120

120121
.navbar-brand .logo {
@@ -182,6 +183,18 @@ a:hover {
182183
background-color: var(--text-primary);
183184
margin: 3px 0;
184185
transition: var(--transition);
186+
transform-origin: center;
187+
}
188+
189+
/* Animate hamburger -> X */
190+
.mobile-menu-toggle.active span:nth-child(1) {
191+
transform: translateY(12px) rotate(45deg);
192+
}
193+
.mobile-menu-toggle.active span:nth-child(2) {
194+
opacity: 0;
195+
}
196+
.mobile-menu-toggle.active span:nth-child(3) {
197+
transform: translateY(-6px) rotate(-45deg);
185198
}
186199

187200
/* Hero section */
@@ -590,12 +603,51 @@ hr {
590603
padding: 0 var(--spacing-md);
591604
}
592605

606+
/* Mobile dropdown menu (smooth transition) */
593607
.navbar-menu {
594-
display: none;
608+
display: flex; /* keep layout consistent */
609+
flex-direction: column;
610+
position: absolute;
611+
top: 100%;
612+
left: 0;
613+
right: 0;
614+
background-color: var(--bg-primary);
615+
border-bottom: 1px solid var(--border-color);
616+
gap: var(--spacing-md);
617+
padding: var(--spacing-md) var(--spacing-lg);
618+
box-shadow: 0 8px 25px var(--shadow);
619+
z-index: 110;
620+
/* hidden state */
621+
max-height: 0;
622+
overflow: hidden;
623+
opacity: 0;
624+
transform: translateY(-8px);
625+
pointer-events: none;
626+
visibility: hidden;
627+
transition: max-height 0.25s ease, opacity 0.2s ease, transform 0.2s ease, visibility 0.2s ease;
628+
}
629+
/* Shown when hamburger is toggled */
630+
.navbar-menu.is-open {
631+
max-height: 60vh;
632+
opacity: 1;
633+
transform: translateY(0);
634+
pointer-events: auto;
635+
visibility: visible;
636+
}
637+
/* Keep column layout during both open and closing transitions to prevent sideways shift */
638+
.navbar-menu .navbar-nav {
639+
flex-direction: column;
640+
gap: var(--spacing-sm);
641+
}
642+
.navbar-menu.is-open .nav-link {
643+
display: block;
644+
padding: var(--spacing-sm) 0;
595645
}
596646

597647
.mobile-menu-toggle {
598648
display: flex;
649+
position: relative; /* allow z-index */
650+
z-index: 120; /* above the dropdown so the X isn't clipped */
599651
}
600652

601653
.hero-content {

0 commit comments

Comments
 (0)