--- title: Mobile Navigation Patterns created: 2026-07-03 updated: 2026-07-03 type: system tags: [mobile, navigation, ux, bottom-nav, hamburger, gesture] sources: - https://www.uxpin.com/studio/blog/mobile-navigation-examples/ - https://www.uxpin.com/studio/blog/mobile-navigation-patterns-pros-and-cons/ - https://www.seven-squar-tech.com/which-mobile-navigation-patterns-works-what-fails/ - https://claritee.io/blog/creative-mobile-ui-patterns-for-enhanced-navigation/ confidence: high --- # Mobile Navigation Patterns — Мобильная навигация ## 1. Типы навигации для мобильных ### 1.1 Bottom Tab Bar (Наиболее предпочтительная) ```css .bottom-nav { position: fixed; bottom: 0; left: 0; right: 0; height: calc(56px + var(--safe-bottom)); padding-bottom: var(--safe-bottom); background: var(--surface-1); border-top: 1px solid var(--border-1); display: flex; justify-content: space-around; align-items: center; z-index: 100; box-shadow: 0 -2px 10px rgba(0,0,0,0.05); } .bottom-nav__item { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 8px 16px; color: var(--text-secondary); text-decoration: none; font-size: 12px; transition: color 0.2s; min-width: 48px; min-height: 48px; justify-content: center; } .bottom-nav__item.active { color: var(--primary); } .bottom-nav__item.active .bottom-nav__icon { transform: scale(1.1); } .bottom-nav__icon { width: 24px; height: 24px; transition: transform 0.2s; } ``` **Правила:** - 3-5 элементов максимум - Иконка + подпись - Текущий раздел выделен - Не скрывать при скролле - Лучше чем hamburger (все элементы видны) ### 1.2 Top Navigation Bar ```css .top-nav { position: sticky; top: 0; left: 0; right: 0; height: 56px; padding: 0 16px; background: var(--surface-1); border-bottom: 1px solid var(--border-1); display: flex; align-items: center; justify-content: space-between; z-index: 100; } .top-nav__title { font-size: var(--text-lg); font-weight: 600; } .top-nav__actions { display: flex; gap: 16px; align-items: center; } .top-nav__action { width: 40px; height: 40px; display: flex; align-items: center; justify-content: center; border-radius: 50%; background: transparent; border: none; color: var(--text-primary); cursor: pointer; transition: background 0.2s; } .top-nav__action:active { background: var(--surface-2); } ``` **Правила:** - Sticky при скролле (не fixed) - Логотип слева, действия справа - Заголовок по центру - Минимум 2-3 действия ### 1.3 Hamburger Menu (Slide-in Drawer) ```css .hamburger-menu { position: fixed; top: 0; left: 0; width: 85vw; max-width: 320px; height: 100dvh; background: var(--surface-1); transform: translateX(-100%); transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); z-index: 1000; padding: 24px; padding-top: calc(24px + var(--safe-top)); overflow-y: auto; } .hamburger-menu.open { transform: translateX(0); } .hamburger-menu__overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); opacity: 0; visibility: hidden; transition: opacity 0.3s ease; z-index: 999; } .hamburger-menu.open + .hamburger-menu__overlay { opacity: 1; visibility: visible; } .hamburger-menu__link { display: flex; align-items: center; gap: 12px; padding: 16px; color: var(--text-primary); text-decoration: none; font-size: var(--text-base); border-radius: 8px; transition: background 0.2s; } .hamburger-menu__link:active { background: var(--surface-2); } .hamburger-menu__link .menu-icon { width: 24px; height: 24px; } ``` **Правила:** - 5-8 пунктов максимум - Иконка + текст - Разделители между секциями - Закрывать по тапу на overlay или свайпу - Всегда видный close button ### 1.4 Bottom Sheet Navigation ```css .bottom-sheet-nav { position: fixed; bottom: 0; left: 0; right: 0; background: var(--surface-1); border-radius: 16px 16px 0 0; transform: translateY(100%); transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1); z-index: 1000; padding: 16px; padding-bottom: calc(16px + var(--safe-bottom)); max-height: 70dvh; overflow-y: auto; } .bottom-sheet-nav.open { transform: translateY(0); } .bottom-sheet-nav__handle { width: 40px; height: 4px; background: var(--border-1); border-radius: 2px; margin: 0 auto 16px; cursor: grab; } .bottom-sheet-nav__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } .bottom-sheet-nav__item { display: flex; flex-direction: column; align-items: center; gap: 8px; padding: 16px; border-radius: 12px; text-decoration: none; color: var(--text-primary); } .bottom-sheet-nav__item:active { background: var(--surface-2); } .bottom-sheet-nav__item .nav-icon { width: 32px; height: 32px; background: var(--surface-2); border-radius: 8px; display: flex; align-items: center; justify-content: center; } ``` ### 1.5 Pill Navigation (Chip Scroller) ```css .pill-nav { display: flex; gap: 8px; overflow-x: auto; padding: 12px 16px; scrollbar-width: none; -webkit-overflow-scrolling: touch; } .pill-nav::-webkit-scrollbar { display: none; } .pill-nav__item { padding: 8px 16px; border-radius: 24px; background: var(--surface-2); color: var(--text-secondary); white-space: nowrap; font-size: var(--text-sm); border: 1px solid var(--border-1); text-decoration: none; transition: all 0.2s; min-height: 36px; display: flex; align-items: center; } .pill-nav__item.active { background: var(--primary); color: white; border-color: var(--primary); } .pill-nav__item:active { transform: scale(0.95); } ``` **Где использовать:** Категории, фильтры, быстрые действия. ## 2. Navigation Comparison Matrix | Паттерн | Кол-во пунктов | Видимость | Доступность | Скорость | |---------|---------------|-----------|-------------|----------| | Bottom Tab | 3-5 | ★★★★★ | ★★★★★ | ★★★★★ | | Top Nav | 2-3 | ★★★★☆ | ★★★★☆ | ★★★★☆ | | Hamburger | 5-8 | ★☆☆☆☆ | ★★★☆☆ | ★★☆☆☆ | | Bottom Sheet | 6-12 | ★☆☆☆☆ | ★★★☆☆ | ★★★☆☆ | | Pill Nav | 5-15 | ★★★★☆ | ★★★★☆ | ★★★★☆ | ## 3. Navigation Rules ### Golden Rules 1. **3-5 основных разделов** — больше требует hierarchy 2. **Bottom Tab > Hamburger** — видимая навигация всегда лучше 3. **Иконка + текст** — всегда, никогда только иконки 4. **Текущий раздел всегда выделен** — не заставляйте пользователя думать 5. **Навигация не исчезает при скролле** — sticky или fixed 6. **Один паттерн на сайт** — не смешивайте bottom tab и hamburger ### When to Use What | Ситуация | Паттерн | |----------|---------| | 3-5 основных разделов | Bottom Tab Bar | | Много разделов (>5) | Bottom Tab + More (bottom sheet) | | Product page (1 раздел) | Top Nav | | Landing page (1 страница) | Нет навигации или якоря | | Admin panel | Side drawer (left) | | E-commerce categories | Pill Nav | ## 4. Navigation Patterns for Content ### 4.1 Swipe to Navigate ```css .swipe-container { display: flex; overflow-x: hidden; scroll-snap-type: x mandatory; scroll-behavior: smooth; -webkit-overflow-scrolling: touch; } .swipe-container .page { flex: 0 0 100%; scroll-snap-align: start; } ``` ### 4.2 Breadcrumbs (Mobile) ```css .breadcrumbs { display: flex; align-items: center; gap: 8px; padding: 12px 16px; overflow-x: auto; scrollbar-width: none; white-space: nowrap; font-size: var(--text-sm); } .breadcrumbs::-webkit-scrollbar { display: none; } .breadcrumbs__item { color: var(--text-secondary); text-decoration: none; } .breadcrumbs__item.active { color: var(--text-primary); font-weight: 500; } .breadcrumbs__separator { color: var(--text-secondary); font-size: 12px; } ``` ### 4.3 Tab Content Navigation ```css .tab-content { position: relative; } .tab-content__header { position: sticky; top: 56px; background: var(--surface-1); border-bottom: 1px solid var(--border-1); z-index: 50; } .tab-content__body { padding: 16px; } .tab-content__section { margin-bottom: 32px; } .tab-content__section-title { font-size: var(--text-xl); font-weight: 700; margin-bottom: 16px; position: sticky; top: 100px; background: var(--surface-1); padding: 8px 0; z-index: 10; } ``` ## 5. Navigation Anti-Patterns | ❌ Плохо | ✅ Хорошо | |----------|-----------| | Hamburger для 3-4 разделов | Bottom Tab Bar | | Скрытие навигации при скролле | Sticky/Fixed навигация | | Только иконки без текста | Иконка + подпись | | 6+ пунктов в bottom nav | Разделить на разделы | | Навигация на top для основного | Bottom для основных | | Нет выделенного активного состояния | Четкий active state |