Адаптивность — сайт на любом экране
70% трафика в 2026 — мобильный. Сайт который ломается на телефоне = сайт который теряет 70% пользователей. Адаптивность — не «красивый бонус», а must-have. К счастью, на современном CSS это просто.
Гибкие единицы
px — фиксированный размер. % — от родителя. em — от размера шрифта родителя. rem — от размера шрифта html (root). vh / vw — % от высоты/ширины viewport. clamp(min, preferred, max) — гибкая граница, особенно крута для шрифтов:
сам растягивается между телефоном и десктопом.
Viewport meta — обязательно
В <head> ВСЕГДА должно быть
Без него мобильный браузер думает что сайт сделан для десктопа и показывает в уменьшенном виде — тексты не читаемы. ИИ обычно эту строку добавляет, но проверяй.
media-queries
стили применяются ТОЛЬКО когда экран ≤ 768px (мобильный). min-width — наоборот. Правило: брейкпоинты нужны там где ВЁРСТКА реально ломается, не «потому что 768». Часто используют 640 (планшет), 1024 (ноутбук). Современный подход — без брейкпоинтов где можно (за счёт grid auto-fit, clamp, flex-wrap).
Mobile-first
Принцип: пишем CSS сразу для мобильного, потом расширяем для больших экранов через
Альтернатива (desktop-first с max-width) тоже работает, но мобильный-first приучает делать сначала ПРОСТО, потом усложнять. И мобильный-first рендерится быстрее (меньше CSS-кода скачивается на телефон).
<!-- В <head> ВСЕГДА: -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
/* === MOBILE-FIRST стили (по умолчанию для телефона) === */
.container {
max-width: 100%;
padding: 16px;
}
.hero h1 {
font-size: clamp(28px, 6vw, 48px); /* 28px на мобиле → до 48px на десктопе */
line-height: 1.1;
}
.cards {
display: grid;
grid-template-columns: 1fr; /* одна колонка по умолчанию */
gap: 16px;
}
.nav {
display: flex;
flex-direction: column; /* меню вертикально на мобиле */
gap: 12px;
}
/* === ПЛАНШЕТ И ВЫШЕ === */
@media (min-width: 640px) {
.container { padding: 24px }
.cards { grid-template-columns: 1fr 1fr } /* 2 колонки */
.nav { flex-direction: row; gap: 24px } /* меню в строку */
}
/* === ДЕСКТОП === */
@media (min-width: 1024px) {
.container { max-width: 1200px; margin: 0 auto; padding: 48px }
.cards { grid-template-columns: repeat(3, 1fr) } /* 3 колонки */
}
/* === ПОДХОД БЕЗ MEDIA-QUERIES (когда возможно) === */
.adaptive-cards {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 16px;
}
/* Сама подстроится: на узком — 1 колонка, на широком — сколько влезет */
/* === clamp для шрифтов === */
h1 { font-size: clamp(28px, 5vw, 56px) } /* плавный рост от 28 до 56 */
p { font-size: clamp(14px, 2vw, 18px) }
/* === Скрыть/показать на размерах === */
.mobile-only { display: block }
.desktop-only { display: none }
@media (min-width: 768px) {
.mobile-only { display: none }
.desktop-only { display: block }
}Адаптивный лендинг на mobile-first подходе