---
title: Mobile Layout & Pattern Systems
created: 2026-07-03
updated: 2026-07-03
type: system
tags: [mobile, layout, patterns, responsive, touch, mobile-first]
sources:
- https://www.uxpin.com/studio/blog/mobile-navigation-examples/
- https://www.uxpin.com/studio/blog/mobile-navigation-patterns-pros-and-cons/
- https://www.letsgroto.com/blog/mobile-first-responsive-design-best-practices
- https://www.uxpin.com/studio/blog/best-practices-examples-of-excellent-responsive-design/
- https://www.startdesigns.com/blog/responsive-web-design-2026/
- https://www.jamesrossjr.com/blog/responsive-web-design-best-practices
- https://dev.to/gerryleonugroho/responsive-design-breakpoints-2025-playbook-53ih
- https://scrimba.com/articles/responsive-web-design-a-complete-guide-2026-2/
confidence: high
---
# Mobile Layout & Pattern Systems — Мобильные паттерны верстки
## 1. Базовые принципы
### Mobile-First: философия, а не техника
Мобильный дизайн — это дисциплина приоритизации. На экране 360×800px каждое пиксельное решение имеет вес.
| Принцип | Описание |
|---------|----------|
| **Progressive Enhancement** | Базовый контент → улучшенные компоненты → desktop-роскошь |
| **One-thumb Zone** | Основные интерактивные элементы в нижней половине экрана |
| **Content-First Flow** | Сначала контент, потом декор (всегда) |
| **Touch-Optimized** | 44×44px минимальный tap target, 8px gap между touch-элементами |
| **Performance-Aware** | Каждый миллисекунда LCP на мобильном важнее десктопа |
### Глобальные CSS Variables для Mobile
```css
:root {
/* Safe Area — iOS notch, Android gesture bar */
--safe-top: env(safe-area-inset-top, 20px);
--safe-bottom: env(safe-area-inset-bottom, 34px);
--safe-left: env(safe-area-inset-left, 0px);
--safe-right: env(safe-area-inset-right, 0px);
/* Typography — fluid on mobile */
--text-xs: clamp(0.75rem, 2vw, 0.875rem);
--text-sm: clamp(0.875rem, 2.5vw, 1rem);
--text-base: clamp(1rem, 3vw, 1.125rem);
--text-lg: clamp(1.125rem, 3.5vw, 1.25rem);
--text-xl: clamp(1.25rem, 4vw, 1.5rem);
/* Spacing — mobile-optimized */
--space-xs: 0.25rem;
--space-sm: 0.5rem;
--space-md: 1rem;
--space-lg: 1.5rem;
--space-xl: 2rem;
--space-2xl: 3rem;
/* Touch targets */
--touch-min: 44px;
--touch-gap: 8px;
/* Breakpoints — content-based, not device-based */
--bp-sm: 480px; /* Large phones */
--bp-md: 768px; /* Tablets portrait */
--bp-lg: 1024px; /* Tablets landscape */
--bp-xl: 1280px; /* Desktops */
}
```
## 2. Breakpoints: Content-Based, Not Device-Based
### Современная система breakpoints
```css
/* Content-first breakpoints */
@media (min-width: 640px) { /* sm: Large phones, small tablets */ }
@media (min-width: 768px) { /* md: Tablets */ }
@media (min-width: 1024px) { /* lg: Small laptops */ }
@media (min-width: 1280px) { /* xl: Desktops */ }
@media (min-width: 1536px) { /* 2xl: Large desktops */ }
/* Container Queries — component-level адаптивность */
.card-container {
container-type: inline-size;
container-name: card;
}
@container card (min-width: 400px) {
.card {
grid-template-columns: 1fr 2fr;
}
}
@container card (min-width: 600px) {
.card {
grid-template-columns: 1fr 1fr 1fr;
}
}
```
### Почему container queries > media queries
| Media Queries | Container Queries |
|---------------|-------------------|
| Адаптация по viewport | Адаптация по родительскому контейнеру |
| Один layout для всей страницы | Разные layout для разных компонентов |
| Медленные перерасчеты | Реакция на изменение контейнера |
| Не работает в iframe/grid | Работает везде |
## 3. Mobile Layout Patterns
### 3.1 Single-Column Stack (Базовый)
Все элементы вертикально, 16-24px gap между секциями.
```css
.mobile-stack {
display: flex;
flex-direction: column;
gap: var(--space-lg);
padding: var(--space-lg) var(--space-md) calc(var(--safe-bottom) + var(--space-lg)) var(--space-md);
}
.mobile-stack > * {
width: 100%;
max-width: 100%;
}
```
**Где использовать:** Лендинги, product pages, статьи, landing pages для мобайла.
### 3.2 Full-Bleed Sections
Секции, выходящие за границы контейнера, создают глубину.
```css
.full-bleed-section {
margin-left: calc(var(--space-md) * -1);
margin-right: calc(var(--space-md) * -1);
}
.full-bleed-section .container {
padding-left: var(--space-lg);
padding-right: var(--space-lg);
}
```
**Где использовать:** Hero, testimonials, image-heavy sections.
### 3.3 Bento Grid (Mobile Adaptation)
На мобайле bento grid превращается в single-column с карточками разной высоты.
```css
.bento-grid {
display: grid;
grid-template-columns: 1fr;
gap: var(--space-md);
}
.bento-card {
min-height: var(--touch-min);
padding: var(--space-lg);
border-radius: var(--space-md);
}
.bento-card.featured {
order: -1; /* featured card first */
}
```
### 3.4 Sticky Bottom CTA
Кнопка действия всегда видна внизу экрана, над клавиатурой.
```css
.sticky-bottom-cta {
position: fixed;
bottom: 0;
left: 0;
right: 0;
padding: var(--space-md) var(--space-lg) calc(var(--safe-bottom) + var(--space-md));
background: linear-gradient(to top, rgba(0,0,0,0.9), transparent);
z-index: 100;
}
.sticky-bottom-cta button {
min-height: var(--touch-min);
width: 100%;
font-size: var(--text-lg);
font-weight: 600;
}
```
**Где использовать:** E-commerce, формы, booking-системы.
### 3.5 Card-First Layout
Контент карточками — основной паттерн мобайла.
```css
.card-list {
display: flex;
flex-direction: column;
gap: var(--space-md);
padding: var(--space-md) var(--space-lg);
}
.card {
background: var(--surface-1);
border-radius: var(--space-md);
padding: var(--space-lg);
box-shadow: 0 1px 3px rgba(0,0,0,0.08);
/* Touch-friendly */
min-height: var(--touch-min);
display: flex;
flex-direction: column;
justify-content: center;
}
.card__media {
width: 100%;
aspect-ratio: 16/9;
object-fit: cover;
border-radius: var(--space-sm) var(--space-sm) 0 0;
margin: calc(var(--space-lg) * -1) calc(var(--space-lg) * -1) var(--space-md);
}
.card__title {
font-size: var(--text-lg);
font-weight: 600;
margin-bottom: var(--space-xs);
}
.card__meta {
font-size: var(--text-xs);
color: var(--text-secondary);
}
```
### 3.6 Masonry (Mobile)
```css
.masonry {
columns: 2;
column-gap: var(--space-sm);
}
.masonry-item {
break-inside: avoid;
margin-bottom: var(--space-sm);
border-radius: var(--space-sm);
}
/* Single column on very small screens */
@media (max-width: 360px) {
.masonry { columns: 1; }
}
```
### 3.7 Swipeable Sections
CSS scroll-snap для горизонтальных секций.
```css
.swipe-section {
display: flex;
gap: var(--space-md);
overflow-x: auto;
scroll-snap-type: x mandatory;
scroll-behavior: smooth;
-webkit-overflow-scrolling: touch;
padding: var(--space-md) var(--space-lg);
scrollbar-width: none; /* Firefox */
}
.swipe-section::-webkit-scrollbar {
display: none;
}
.swipe-item {
scroll-snap-align: start;
flex: 0 0 auto;
width: min(280px, 80vw);
}
```
**Где использовать:** Карусели, product carousels, category pills, testimonial sliders.
## 4. Mobile Typography
### Fluid Typography Formula
```css
/* Base size scales proportionally */
--text-base-size: clamp(1rem, 0.875rem + 0.5vw, 1.25rem);
/* Scale multiplier */
--scale-ratio: 1.25; /* Major Third */
--text-sm: calc(var(--text-base-size) / var(--scale-ratio));
--text-lg: calc(var(--text-base-size) * var(--scale-ratio));
--text-xl: calc(var(--text-lg) * var(--scale-ratio));
--text-2xl: calc(var(--text-xl) * var(--scale-ratio));
```
### Line Height & Readability
```css
/* Body text — line-height для мобильных */
.text-body {
font-size: var(--text-base);
line-height: 1.6; /* 1.5 на десктопе, 1.6 на мобайле */
max-width: 65ch; /* Оптимальная ширина строки */
}
/* Headings — tighter on mobile */
.text-heading {
line-height: 1.2;
font-weight: 700;
letter-spacing: -0.02em;
}
```
## 5. Touch-Optimized Components
### Touch-First Button
```css
.btn {
min-height: var(--touch-min);
min-width: var(--touch-min);
padding: var(--space-md) var(--space-xl);
display: inline-flex;
align-items: center;
justify-content: center;
gap: var(--space-sm);
font-size: var(--text-base);
font-weight: 600;
border: none;
border-radius: var(--space-md);
cursor: pointer;
transition: transform 0.1s ease, background 0.2s ease;
/* Touch feedback */
-webkit-tap-highlight-color: transparent;
-webkit-touch-callout: none;
}
.btn:active {
transform: scale(0.98);
}
```
### Touch-Optimized Form Input
```css
.form-input {
min-height: var(--touch-min);
padding: var(--space-md) var(--space-lg);
font-size: var(--text-base); /* Prevents iOS zoom on focus */
border: 2px solid var(--border-1);
border-radius: var(--space-md);
background: var(--surface-1);
transition: border-color 0.15s ease;
width: 100%;
}
.form-input:focus {
border-color: var(--primary);
outline: none;
box-shadow: 0 0 0 3px color-mix(in srgb, var(--primary) 20%, transparent);
}
/* iOS zoom prevention */
@media screen and (max-width: 480px) {
.form-input {
font-size: 16px; /* Minimum to prevent zoom on iOS */
}
}
```
## 6. Mobile-First CSS Architecture
### Base → Component → Layout
```
styles/
base/
_reset.css /* Normalize, box-sizing */
_typography.css /* Fluid type scale */
_colors.css /* CSS Variables, tokens */
_accessibility.css /* Focus states, reduced motion */
components/
_buttons.css /* Touch-optimized buttons */
_inputs.css /* Form fields */
_cards.css /* Card patterns */
_nav.css /* Mobile nav */
layout/
_stack.css /* Single-column layout */
_grid.css /* Responsive grids */
_sections.css /* Section patterns */
utilities/
_spacing.css /* Margin/padding utilities */
_display.css /* Flex, grid utilities */
_accessibility.css /* sr-only, reduced-motion */
```
### Reduced Motion
```css
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}
```
## 7. Performance Patterns for Mobile
### Image Optimization
```html
```
### Critical CSS for Mobile
```css
/* Inlined in