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

427 lines
11 KiB
Markdown
Raw Permalink Normal View History

# 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 | |