Skip to content

Commit 266cb7a

Browse files
committed
Fix mobile layout
1 parent 86bf7a2 commit 266cb7a

File tree

2 files changed

+79
-20
lines changed

2 files changed

+79
-20
lines changed

src/components/Header/Header.css

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
display: flex;
6666
align-items: center;
6767
gap: 0.75rem;
68-
margin: 0 auto;
6968
}
7069

7170
.logo-image {
@@ -79,6 +78,29 @@
7978
color: var(--primary-color);
8079
}
8180

81+
.hamburger-menu {
82+
display: none;
83+
flex-direction: column;
84+
gap: 4px;
85+
background: none;
86+
border: none;
87+
cursor: pointer;
88+
padding: 8px;
89+
z-index: 101;
90+
}
91+
92+
.hamburger-menu span {
93+
width: 24px;
94+
height: 2px;
95+
background-color: var(--text-secondary);
96+
transition: all 0.3s ease;
97+
border-radius: 2px;
98+
}
99+
100+
.hamburger-menu:hover span {
101+
background-color: var(--primary-color);
102+
}
103+
82104
.nav-links {
83105
display: flex;
84106
align-items: center;
@@ -215,17 +237,36 @@
215237
font-size: 1.25rem;
216238
}
217239

218-
.nav-logo {
219-
margin-left: 3rem;
240+
.hamburger-menu {
241+
display: flex;
220242
}
221243

222244
.nav-links {
223-
gap: 1rem;
245+
position: fixed;
246+
top: 0;
247+
right: -100%;
248+
height: 100vh;
249+
width: 70%;
250+
max-width: 300px;
251+
background: var(--background-primary);
252+
flex-direction: column;
253+
padding: 5rem 2rem 2rem;
254+
gap: 1.5rem;
255+
transition: right 0.3s ease;
256+
border-left: 1px solid var(--border-color);
257+
z-index: 100;
258+
box-shadow: -2px 0 10px rgba(0, 0, 0, 0.3);
259+
}
260+
261+
.nav-links.mobile-open {
262+
right: 0;
224263
}
225264

226265
.nav-link {
227-
font-size: 0.875rem;
228-
padding: 6px 12px;
266+
font-size: 1rem;
267+
padding: 12px 16px;
268+
width: 100%;
269+
text-align: left;
229270
}
230271

231272
.profile-button,

src/components/Header/Header.tsx

Lines changed: 32 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import React, {useState} from 'react';
22
import './Header.css';
33
import {useAuth} from '../../contexts/AuthContext';
44

@@ -8,37 +8,55 @@ interface HeaderProps {
88

99
const Header: React.FC<HeaderProps> = ({isSubpage = false}) => {
1010
const {user} = useAuth();
11+
const [mobileMenuOpen, setMobileMenuOpen] = useState(false);
1112

1213
return (
1314
<header className="app-header">
1415
<nav className="app-nav">
15-
{isSubpage && (
16-
<button onClick={() => window.location.hash = ''} className="back-arrow" title="Back to Home">
17-
18-
</button>
19-
)}
2016
<div className="nav-logo" onClick={() => window.location.hash = ''} style={{cursor: 'pointer'}}>
2117
<img src="images/logo_salamander.png" alt="Salamander" className="logo-image"/>
2218
<h1>Salamander</h1>
2319
</div>
24-
<div className="nav-links">
25-
<button onClick={() => window.location.hash = 'learn-more'}
26-
className="nav-link nav-link-secondary">Get Started
20+
<button
21+
className="hamburger-menu"
22+
onClick={() => setMobileMenuOpen(!mobileMenuOpen)}
23+
aria-label="Toggle menu"
24+
>
25+
<span></span>
26+
<span></span>
27+
<span></span>
28+
</button>
29+
<div className={`nav-links ${mobileMenuOpen ? 'mobile-open' : ''}`}>
30+
<button onClick={() => {
31+
window.location.hash = 'learn-more';
32+
setMobileMenuOpen(false);
33+
}} className="nav-link nav-link-secondary">Get Started
2734
</button>
28-
<button onClick={() => window.location.hash = 'pricing'} className="nav-link">Pricing</button>
35+
<button onClick={() => {
36+
window.location.hash = 'pricing';
37+
setMobileMenuOpen(false);
38+
}} className="nav-link">Pricing</button>
2939
{user ? (
3040
<button
3141
className="nav-link"
32-
onClick={() => window.location.hash = 'account'}
42+
onClick={() => {
43+
window.location.hash = 'account';
44+
setMobileMenuOpen(false);
45+
}}
3346
title={`${user.displayName || user.email} - View Account`}
3447
>
3548
Profile
3649
</button>
3750
) : (
3851
<>
39-
<button onClick={() => window.location.hash = 'auth'} className="nav-link">Log In</button>
40-
<button onClick={() => window.location.hash = 'auth'}
41-
className="nav-link nav-link-primary">Sign Up
52+
<button onClick={() => {
53+
window.location.hash = 'auth';
54+
setMobileMenuOpen(false);
55+
}} className="nav-link">Log In</button>
56+
<button onClick={() => {
57+
window.location.hash = 'auth';
58+
setMobileMenuOpen(false);
59+
}} className="nav-link nav-link-primary">Sign Up
4260
</button>
4361
</>
4462
)}

0 commit comments

Comments
 (0)