feat: Modern mobile-first UX improvements
Implemented 5 major improvements for better mobile UX: 1. ✅ Fixed Header Transform Issue Problem: Header used sticky + translateY, so submenu top-0 had no effect Solution: Changed to fixed positioning on mobile Before: <header className="sticky top-0 -translate-y-full"> After: <header className="fixed top-0 left-0 right-0 -translate-y-full"> <div className="pt-16"> <!-- compensate for fixed header --> Result: Submenu now properly moves to top-0 when header hides 2. ✅ Removed Top Bar in Mobile Standalone Mode Problem: Top bar wastes precious vertical space on mobile Solution: Hide header completely on mobile PWA standalone Implementation: if (isStandalone && window.innerWidth < 768) return null; Result: Native app feel, maximum content space 3. ✅ Fixed More Page Gap Problem: PageHeader had transparent background, content visible behind Solution: Changed to solid background Before: bg-background/95 backdrop-blur After: bg-background Result: Clean, solid header with no bleed-through 4. ✅ Fixed Button Sizing Problem: .ui-ctrl class overriding button heights Solution: Removed .ui-ctrl from Button component Before: className={cn('ui-ctrl', buttonVariants(...))} After: className={cn(buttonVariants(...))} Button sizes now work correctly: - sm: h-8 (32px) - default: h-9 (36px) - lg: h-10 (40px) 5. ✅ Implemented Contextual Headers Problem: No page-specific headers Solution: Added usePageHeader hook to More page Implementation: useEffect(() => { setPageHeader(__('More')); return () => clearPageHeader(); }, []); Result: Consistent header pattern across all pages Mobile Layout (Standalone Mode): ┌─────────────────────────────────┐ │ (No top bar - native feel) │ ├─────────────────────────────────┤ │ Submenu (dynamic top) │ ├─────────────────────────────────┤ │ Page Title (contextual) │ ├─────────────────────────────────┤ │ Content │ │ [+] │ ├─────────────────────────────────┤ │ Bottom Nav │ └─────────────────────────────────┘ Benefits: ✅ Native app feel on mobile ✅ Maximum content space (64px saved!) ✅ Smooth scroll animations ✅ Consistent button sizing ✅ Clean, professional look ✅ Industry-standard UX Files Modified: - App.tsx: Fixed header positioning, hide on mobile standalone - PageHeader.tsx: Solid background - button.tsx: Removed ui-ctrl override - More/index.tsx: Added contextual header Next Steps: - Add contextual headers to remaining pages - Test on real devices - Add page transitions - Implement pull-to-refresh
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
import React from 'react';
|
||||
import { useNavigate } from 'react-router-dom';
|
||||
import React, { useEffect } from 'react';
|
||||
import { useNavigate, Link } from 'react-router-dom';
|
||||
import { Tag, Settings as SettingsIcon, ChevronRight } from 'lucide-react';
|
||||
import { __ } from '@/lib/i18n';
|
||||
import { usePageHeader } from '@/contexts/PageHeaderContext';
|
||||
|
||||
interface MenuItem {
|
||||
icon: React.ReactNode;
|
||||
@@ -27,17 +28,20 @@ const menuItems: MenuItem[] = [
|
||||
|
||||
export default function MorePage() {
|
||||
const navigate = useNavigate();
|
||||
const { setPageHeader, clearPageHeader } = usePageHeader();
|
||||
|
||||
useEffect(() => {
|
||||
setPageHeader(__('More'));
|
||||
return () => clearPageHeader();
|
||||
}, [setPageHeader, clearPageHeader]);
|
||||
|
||||
return (
|
||||
<div className="min-h-screen bg-background pb-20">
|
||||
{/* Header */}
|
||||
<div className="sticky top-0 z-10 bg-background border-b">
|
||||
<div className="px-4 py-4">
|
||||
<h1 className="text-2xl font-bold">{__('More')}</h1>
|
||||
<p className="text-sm text-muted-foreground mt-1">
|
||||
{__('Additional features and settings')}
|
||||
</p>
|
||||
</div>
|
||||
{/* Remove inline header - use PageHeader component instead */}
|
||||
<div className="px-4 py-4">
|
||||
<p className="text-sm text-muted-foreground">
|
||||
{__('Additional features and settings')}
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Menu Items */}
|
||||
|
||||
Reference in New Issue
Block a user