427 lines
11 KiB
Markdown
427 lines
11 KiB
Markdown
|
|
# 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 | |
|