Files
tommygeoco_ui-audit/references/31-patterns-navigation.md

427 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Patterns: Navigation & Wayfinding
Patterns for helping users move through interfaces and find content.
---
## What is Navigation?
The system that lets users move through your interface. Navigation answers three questions:
1. **Where am I?**
2. **Where can I go?**
3. **How do I get there?**
**Core principle:** Users should never feel lost.
---
## Priority+ Navigation
**What:** Show important items, collapse the rest.
### How It Works
1. Display as many items as fit
2. Collapse remaining into "More" menu
3. Responsive—adapts to screen width
### Benefits
- **Responsive** — Works at any width
- **Priority-aware** — Most important items visible
- **Clean** — Avoids overflow/wrapping
### Implementation Guidelines
**DO:**
- Order items by importance
- Use clear "More" or "..." indicator
- Test at various breakpoints
- Include current item (even if in overflow)
- Make overflow menu discoverable
**DON'T:**
- Put critical items in overflow
- Hide "More" when items overflow
- Change item order at breakpoints
- Use tiny touch targets for "More"
### Pattern Example
```
Desktop (1200px+):
[Dashboard] [Projects] [Team] [Reports] [Settings] [Help]
Tablet (768px):
[Dashboard] [Projects] [Team] [Reports] [More ▼]
└─ Settings
└─ Help
Mobile (375px):
[☰] [Dashboard] [More ▼]
```
---
## Off-Canvas / Hamburger Menu
**What:** Navigation hidden behind a toggle, typically a ☰ icon.
### When to Use
- Mobile layouts (space constraint)
- Secondary navigation
- Settings/admin menus
- Large navigation structures
### When NOT to Use
- Desktop with adequate space
- Primary navigation (if room exists)
- Only 3-5 nav items
### Implementation Guidelines
**DO:**
- Use recognizable icon (☰)
- Add text label when space permits
- Animate open/close smoothly
- Allow close via tap outside
- Show current location indication
**DON'T:**
- Hide all navigation on desktop
- Use non-standard icons
- Make menu hard to close
- Nest menus too deeply
- Forget keyboard accessibility
### Hamburger Menu Anatomy
```
[☰ Menu]
──────────────────────
[Avatar] User Name
user@email
──────────────────────
🏠 Dashboard
📁 Projects
👥 Team
📊 Reports
⚙️ Settings
──────────────────────
🚪 Sign out
```
---
## Sticky/Fixed Navigation
**What:** Navigation that stays visible while scrolling.
### Types
| Type | Behavior |
|------|----------|
| **Always fixed** | Always visible, takes space |
| **Scroll-up reveal** | Appears on scroll up, hides on scroll down |
| **Compact on scroll** | Shrinks when scrolling |
| **Below-fold sticky** | Becomes sticky after scrolling past hero |
### Benefits
- **Always accessible** — No scrolling to navigate
- **Orientation** — Constant location indicator
- **Efficiency** — Quick access to common actions
### Implementation Guidelines
**DO:**
- Keep sticky nav compact
- Use shadow to indicate elevation
- Consider scroll direction hiding
- Test on various content lengths
- Ensure doesn't block content
**DON'T:**
- Take excessive vertical space
- Forget mobile (screen height matters)
- Cover content on tap
- Make too visually heavy
- Forget z-index conflicts
### Scroll Behavior Patterns
```css
/* Always visible */
.nav { position: fixed; top: 0; }
/* Compact on scroll */
.nav.scrolled { height: 48px; /* vs 64px default */ }
/* Hide on scroll down, show on scroll up */
.nav.hidden { transform: translateY(-100%); }
```
---
## Bottom Navigation (Mobile)
**What:** Tab bar at bottom of screen for primary navigation.
### When to Use
- Mobile apps with 3-5 primary sections
- Frequent switching between sections
- iOS and Android native patterns
### Implementation Guidelines
**DO:**
- Limit to 3-5 items
- Use icon + label
- Show active state clearly
- Make touch targets 48px+
- Consider safe area (notch, home indicator)
**DON'T:**
- Use for > 5 items
- Use icons alone (without labels)
- Put scrollable content in bottom nav
- Forget selected state
- Nest navigation actions
### Bottom Nav Anatomy
```
┌──────────────────────────────┐
│ │
│ [Content Area] │
│ │
├──────────────────────────────┤
│ 🏠 📁 👤 ⚙️ │
│ Home Files New Profile More│
└──────────────────────────────┘
```
### Icon + Label Guidelines
| Item Count | Label Visibility |
|------------|-----------------|
| 3 items | Labels always visible |
| 4-5 items | Labels always visible or active only |
| 5+ items | Consider other navigation pattern |
---
## Sidebar Navigation
**What:** Vertical navigation, typically on left side.
### Types
| Type | Use Case |
|------|----------|
| **Fixed sidebar** | Dashboard apps, admin tools |
| **Collapsible** | Space optimization |
| **Icon-only (rail)** | Minimal footprint |
| **Expandable** | Icon-only → full on hover |
### Benefits
- **Scalable** — Handles many items
- **Visible** — Always accessible
- **Scannable** — Vertical list easy to scan
- **Groupable** — Sections and hierarchy
### Implementation Guidelines
**DO:**
- Group related items with headers
- Show current location clearly
- Allow collapse (icons only)
- Remember collapsed state
- Consider nesting (2 levels max)
**DON'T:**
- Create too many groups
- Nest more than 2 levels
- Use icons alone for unfamiliar actions
- Make collapsed state too narrow
- Forget mobile adaptation
### Sidebar Anatomy
```
┌──────────────────────────────────────┐
│ [Logo] [Collapse] │
├──────────────────────────────────────┤
│ MAIN │
│ 🏠 Dashboard │
│ 📁 Projects │
│ 📊 Analytics │
├──────────────────────────────────────┤
│ WORKSPACE │
│ 👥 Team │
│ ⚙️ Settings │
├──────────────────────────────────────┤
│ [Avatar] User Name [▼] │
└──────────────────────────────────────┘
```
---
## Tabs (In-Page Navigation)
**What:** Switching between content sections within a page.
### When to Use
- Related content that's mutually exclusive
- User needs to compare/switch frequently
- 2-7 equal-weight sections
### Implementation Guidelines
**DO:**
- Clear active state
- Descriptive labels (2-3 words)
- Logical order
- Preserve content on tab switch
- Support keyboard navigation
**DON'T:**
- Use for sequential steps (use stepper)
- Use for > 7 tabs without overflow
- Change tab content while in progress
- Use tabs within tabs
- Forget about URL state (deep linking)
### Tab Variants
| Variant | Use Case |
|---------|----------|
| **Text tabs** | Standard, most common |
| **Icon + text** | When icons aid recognition |
| **Scrollable** | Many tabs, mobile |
| **Fitted** | Equal-width tabs |
---
## Mega Menus
**What:** Large dropdown menus showing multiple categories.
### When to Use
- Large sites with many categories
- E-commerce, enterprise, media sites
- Categories benefit from visual display
### Implementation Guidelines
**DO:**
- Organize into clear groups
- Include images when helpful
- Provide direct links to popular items
- Support keyboard navigation
- Close on click outside
**DON'T:**
- Make too tall (don't push footer)
- Include too much content
- Auto-open on hover (click better)
- Nest mega menus
- Forget mobile adaptation (often drawer/accordion)
### Mega Menu Anatomy
```
Products ▼
┌─────────────────────────────────────────────────────┐
│ ELECTRONICS APPAREL HOME │
│ Phones Women's Furniture │
│ Laptops Men's Kitchen │
│ Tablets Kids Decor │
│ Accessories Shoes Bedding │
│ │
│ [Featured: New MacBook →] │
└─────────────────────────────────────────────────────┘
```
---
## Command Palette
**What:** Keyboard-driven navigation and command execution.
### Benefits
- **Speed** — Expert users navigate instantly
- **Discovery** — Search for features
- **Accessibility** — Keyboard-first users
- **Unified access** — One place for everything
### Implementation Guidelines
**DO:**
- Trigger with Cmd/Ctrl + K
- Search items AND actions
- Show keyboard shortcuts
- Group results by type
- Support recent/frequent items
**DON'T:**
- Make it the only way to access features
- Require memorization to use
- Forget fuzzy search
- Limit to just navigation
### Command Palette UI
```
⌘K
┌────────────────────────────────────────┐
│ 🔍 Type a command or search... │
├────────────────────────────────────────┤
│ RECENT │
│ 📄 Project Alpha │
│ 📊 Analytics Dashboard │
├────────────────────────────────────────┤
│ ACTIONS │
Create new project ⌘N │
│ 👤 Invite team member ⌘I │
│ ⚙️ Open settings ⌘, │
└────────────────────────────────────────┘
```
---
## Navigation Selection Guide
| Context | Recommended Pattern |
|---------|---------------------|
| Web app, many sections | Sidebar |
| Mobile app, 3-5 sections | Bottom nav |
| Content site, many categories | Mega menu |
| Power users | Command palette |
| Limited nav items | Priority+ |
| Mobile, complex nav | Hamburger + drawer |
| Dashboard, multiple views | Tabs |
---
## Navigation Audit
| Requirement | Implemented? |
|-------------|--------------|
| ☐ Current location clear | |
| ☐ Available destinations visible | |
| ☐ Primary nav always accessible | |
| ☐ Mobile navigation works | |
| ☐ Keyboard navigation supported | |
| ☐ Deep linking possible | |
| ☐ Consistent across pages | |
| ☐ Active states clear | |