Статья о вёрстке
Контейнер широкий — картинка слева.
Пять примеров: адаптивная секция, шапка с меню, карточка-контейнер, таблица на мобильном и адаптивная типографика. Меняйте ширину окна и смотрите.
На мобильном блоки идут в столбик, на широком экране — в строку. Отступы и размер заголовка тоже растут.
<section class="rounded-xl bg-slate-50 px-4 py-8 md:px-8 md:py-12">
<div class="flex flex-col gap-6 md:flex-row md:items-center md:gap-10">
<div class="flex-1">
<h2 class="text-2xl font-semibold tracking-tight text-slate-900 md:text-3xl">Адаптивная секция</h2>
<p class="mt-3 text-sm leading-relaxed text-slate-600 md:text-base">
На мобильном блоки идут в столбик, на широком экране — в строку.
Отступы и размер заголовка тоже растут.
</p>
<button class="mt-4 w-full rounded-md bg-slate-900 px-4 py-2 text-sm font-medium text-white md:w-auto">Начать</button>
</div>
<div class="h-32 flex-1 rounded-lg bg-linear-to-br from-sky-400 to-indigo-500"></div>
</div>
</section>
Кнопка во всю ширину на мобильном (w-full) и по содержимому
на десктопе (md:w-auto) — стандартный приём.
<header class="flex items-center justify-between rounded-lg border border-slate-200 bg-white px-4 py-3">
<span class="text-sm font-semibold text-slate-900">Логотип</span>
<nav class="hidden gap-6 text-sm text-slate-600 md:flex">
<a class="hover:text-slate-900" href="#">Возможности</a>
<a class="hover:text-slate-900" href="#">Цены</a>
<a class="hover:text-slate-900" href="#">Блог</a>
</nav>
<div class="flex items-center gap-2">
<button class="rounded-md bg-slate-900 px-3 py-1.5 text-sm text-white">Войти</button>
<button class="rounded-md border border-slate-300 p-2 text-slate-600 md:hidden" aria-label="Меню">☰</button>
</div>
</header>
Контейнер широкий — картинка слева.
Контейнер узкий — картинка сверху.
<div class="grid gap-4 md:grid-cols-[1fr_240px]">
<div class="@container rounded-lg border border-slate-200 bg-white p-4">
<article class="flex flex-col gap-3 @sm:flex-row @sm:items-center">
<div class="h-20 shrink-0 rounded-lg bg-slate-200 @sm:w-28"></div>
<div>
<h3 class="text-sm font-semibold text-slate-900">Статья о вёрстке</h3>
<p class="mt-1 text-xs text-slate-600">Контейнер широкий — картинка слева.</p>
</div>
</article>
</div>
<div class="@container rounded-lg border border-slate-200 bg-white p-4">
<article class="flex flex-col gap-3 @sm:flex-row @sm:items-center">
<div class="h-20 shrink-0 rounded-lg bg-slate-200 @sm:w-28"></div>
<div>
<h3 class="text-sm font-semibold text-slate-900">Статья о вёрстке</h3>
<p class="mt-1 text-xs text-slate-600">Контейнер узкий — картинка сверху.</p>
</div>
</article>
</div>
</div>
Два подхода: прокрутка (проще) и превращение строк в карточки (удобнее).
| Заказ | Клиент | Статус | Сумма |
|---|---|---|---|
| 1042 | Смирнова | Готово | 12 400 |
| 1043 | Ковалёв | Ожидает | 8 900 |
<div class="space-y-4">
<div class="overflow-x-auto rounded-lg border border-slate-200">
<table class="w-max min-w-full text-sm">
<thead class="bg-slate-50 text-xs text-slate-500">
<tr><th class="px-4 py-2 text-left">Заказ</th><th class="px-4 py-2 text-left">Клиент</th><th class="px-4 py-2 text-left">Статус</th><th class="px-4 py-2 text-right">Сумма</th></tr>
</thead>
<tbody class="divide-y divide-slate-100 text-slate-700">
<tr><td class="px-4 py-2">1042</td><td class="px-4 py-2">Смирнова</td><td class="px-4 py-2">Готово</td><td class="px-4 py-2 text-right tabular-nums">12 400</td></tr>
<tr><td class="px-4 py-2">1043</td><td class="px-4 py-2">Ковалёв</td><td class="px-4 py-2">Ожидает</td><td class="px-4 py-2 text-right tabular-nums">8 900</td></tr>
</tbody>
</table>
</div>
</div>
Функция clamp() задаёт размер, который плавно меняется вместе
с шириной окна — промежуточных ступеней не нужно.
<h2 class="text-[clamp(1.5rem,4vw,2.5rem)] font-semibold tracking-tight text-slate-900">
Заголовок растёт плавно
</h2>
<h2 class="text-[clamp(1.5rem,4vw,2.5rem)] font-semibold">Заголовок растёт плавно</h2>
Читается так: не меньше 1.5rem, желательно 4% ширины окна, не больше 2.5rem.