tfrere HF Staff commited on
Commit
84c6237
·
1 Parent(s): 31ecdbe

Header improvements: compact mode with animation, larger logo, orange CTA on scroll + Hero mobile alignment

Browse files
Files changed (2) hide show
  1. src/components/Header.jsx +20 -18
  2. src/pages/Home.jsx +2 -1
src/components/Header.jsx CHANGED
@@ -15,7 +15,6 @@ import {
15
  useMediaQuery,
16
  useTheme,
17
  Link,
18
- Container,
19
  } from '@mui/material';
20
  import MenuIcon from '@mui/icons-material/Menu';
21
  import CloseIcon from '@mui/icons-material/Close';
@@ -37,17 +36,18 @@ export default function Header({ transparent = false }) {
37
  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
38
  const location = useLocation();
39
 
40
- // Track scroll position for transparent header
41
  useEffect(() => {
42
- if (!transparent) return;
43
-
44
  const handleScroll = () => {
45
- setScrolled(window.scrollY > 80);
46
  };
47
 
 
 
 
48
  window.addEventListener('scroll', handleScroll);
49
  return () => window.removeEventListener('scroll', handleScroll);
50
- }, [transparent]);
51
 
52
  const handleDrawerToggle = () => {
53
  setMobileOpen(!mobileOpen);
@@ -146,13 +146,13 @@ export default function Header({ transparent = false }) {
146
  transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
147
  }}
148
  >
149
- <Container maxWidth="xl">
150
  <Toolbar
151
- disableGutters
152
  sx={{
153
  justifyContent: 'space-between',
154
- py: { xs: 2, md: 2.5 },
155
- minHeight: { xs: 64, md: 80 },
 
 
156
  }}
157
  >
158
  {/* Logo */}
@@ -162,9 +162,9 @@ export default function Header({ transparent = false }) {
162
  sx={{
163
  display: 'flex',
164
  alignItems: 'center',
165
- gap: 1.5,
166
  textDecoration: 'none',
167
- transition: 'opacity 0.2s',
168
  '&:hover': {
169
  opacity: 0.8,
170
  },
@@ -175,8 +175,9 @@ export default function Header({ transparent = false }) {
175
  src="/assets/reachy-icon.svg"
176
  alt="Reachy Mini"
177
  sx={{
178
- width: 32,
179
- height: 32,
 
180
  }}
181
  />
182
  <Typography
@@ -185,7 +186,8 @@ export default function Header({ transparent = false }) {
185
  fontWeight: 700,
186
  color: textColor,
187
  letterSpacing: '-0.03em',
188
- fontSize: { xs: 20, md: 22 },
 
189
  }}
190
  >
191
  Reachy Mini
@@ -268,7 +270,7 @@ export default function Header({ transparent = false }) {
268
  <Button
269
  component={RouterLink}
270
  to="/buy"
271
- variant="outlined"
272
  color="primary"
273
  sx={{
274
  px: 3,
@@ -276,6 +278,7 @@ export default function Header({ transparent = false }) {
276
  fontSize: 14,
277
  fontWeight: 600,
278
  borderRadius: 2,
 
279
  ...(isTransparentMode && {
280
  borderColor: 'primary.main',
281
  color: 'primary.main',
@@ -291,7 +294,6 @@ export default function Header({ transparent = false }) {
291
  </Box>
292
  )}
293
  </Toolbar>
294
- </Container>
295
  </AppBar>
296
 
297
  {/* Mobile Drawer */}
@@ -311,7 +313,7 @@ export default function Header({ transparent = false }) {
311
  </Drawer>
312
 
313
  {/* Spacer for fixed AppBar - only show if not transparent */}
314
- {!transparent && <Toolbar sx={{ minHeight: { xs: 64, md: 80 } }} />}
315
  </>
316
  );
317
  }
 
15
  useMediaQuery,
16
  useTheme,
17
  Link,
 
18
  } from '@mui/material';
19
  import MenuIcon from '@mui/icons-material/Menu';
20
  import CloseIcon from '@mui/icons-material/Close';
 
36
  const isMobile = useMediaQuery(theme.breakpoints.down('md'));
37
  const location = useLocation();
38
 
39
+ // Track scroll position for header compacting
40
  useEffect(() => {
 
 
41
  const handleScroll = () => {
42
+ setScrolled(window.scrollY > 50);
43
  };
44
 
45
+ // Check initial position
46
+ handleScroll();
47
+
48
  window.addEventListener('scroll', handleScroll);
49
  return () => window.removeEventListener('scroll', handleScroll);
50
+ }, []);
51
 
52
  const handleDrawerToggle = () => {
53
  setMobileOpen(!mobileOpen);
 
146
  transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
147
  }}
148
  >
 
149
  <Toolbar
 
150
  sx={{
151
  justifyContent: 'space-between',
152
+ px: scrolled ? { xs: 1, md: 1.5, lg: 2 } : { xs: 2, md: 3, lg: 4 },
153
+ py: scrolled ? { xs: 1, md: 1.5 } : { xs: 2, md: 3.5 },
154
+ minHeight: scrolled ? { xs: 56, md: 64 } : { xs: 64, md: 88 },
155
+ transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
156
  }}
157
  >
158
  {/* Logo */}
 
162
  sx={{
163
  display: 'flex',
164
  alignItems: 'center',
165
+ gap: scrolled ? 1 : 1.5,
166
  textDecoration: 'none',
167
+ transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
168
  '&:hover': {
169
  opacity: 0.8,
170
  },
 
175
  src="/assets/reachy-icon.svg"
176
  alt="Reachy Mini"
177
  sx={{
178
+ width: scrolled ? 52 : 60,
179
+ height: scrolled ? 52 : 60,
180
+ transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
181
  }}
182
  />
183
  <Typography
 
186
  fontWeight: 700,
187
  color: textColor,
188
  letterSpacing: '-0.03em',
189
+ fontSize: scrolled ? { xs: 18, md: 19 } : { xs: 20, md: 22 },
190
+ transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
191
  }}
192
  >
193
  Reachy Mini
 
270
  <Button
271
  component={RouterLink}
272
  to="/buy"
273
+ variant={scrolled ? 'contained' : 'outlined'}
274
  color="primary"
275
  sx={{
276
  px: 3,
 
278
  fontSize: 14,
279
  fontWeight: 600,
280
  borderRadius: 2,
281
+ transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',
282
  ...(isTransparentMode && {
283
  borderColor: 'primary.main',
284
  color: 'primary.main',
 
294
  </Box>
295
  )}
296
  </Toolbar>
 
297
  </AppBar>
298
 
299
  {/* Mobile Drawer */}
 
313
  </Drawer>
314
 
315
  {/* Spacer for fixed AppBar - only show if not transparent */}
316
+ {!transparent && <Toolbar sx={{ minHeight: { xs: 64, md: 88 } }} />}
317
  </>
318
  );
319
  }
src/pages/Home.jsx CHANGED
@@ -83,7 +83,8 @@ function Hero() {
83
  position: 'relative',
84
  minHeight: { xs: '85vh', md: '80vh' },
85
  display: 'flex',
86
- alignItems: 'center',
 
87
  backgroundColor: '#000',
88
  overflow: 'hidden',
89
  // Curved bottom edge
 
83
  position: 'relative',
84
  minHeight: { xs: '85vh', md: '80vh' },
85
  display: 'flex',
86
+ alignItems: { xs: 'flex-end', md: 'center' },
87
+ pb: { xs: 12, md: 0 },
88
  backgroundColor: '#000',
89
  overflow: 'hidden',
90
  // Curved bottom edge