🚀 Первый экран

Три варианта hero-секции

Центрированный первый экран

text-balance у заголовка убирает одинокое слово на последней строке.

Версия 4.3 уже доступна

Интерфейсы, которые собираются за вечер

Утилиты вместо CSS-файлов, готовые компоненты вместо велосипедов и тёмная тема из коробки.

<section class="rounded-xl bg-slate-50 px-6 py-12 text-center dark:bg-slate-900">
  <span class="inline-flex rounded-full bg-sky-500/15 px-3 py-1 text-xs font-medium text-sky-700 dark:text-sky-300">Версия 4.3 уже доступна</span>
  <h1 class="mx-auto mt-4 max-w-2xl text-3xl font-semibold tracking-tight text-balance text-slate-900 md:text-5xl dark:text-slate-50">
    Интерфейсы, которые собираются за вечер
  </h1>
  <p class="mx-auto mt-4 max-w-prose text-base leading-relaxed text-slate-600 dark:text-slate-400">
    Утилиты вместо CSS-файлов, готовые компоненты вместо велосипедов и тёмная тема из коробки.
  </p>
  <div class="mt-6 flex flex-col justify-center gap-3 sm:flex-row">
    <button class="rounded-md bg-slate-900 px-5 py-2.5 text-sm font-medium text-white dark:bg-slate-100 dark:text-slate-900">Начать бесплатно</button>
    <button class="rounded-md border border-slate-300 px-5 py-2.5 text-sm font-medium text-slate-700 dark:border-slate-600 dark:text-slate-200">Смотреть демо</button>
  </div>
</section>

Две колонки: текст и изображение

На мобильном блоки идут в столбик, от 768px — в строку.

Всё, что нужно команде

Отчёты, задачи и загрузка команды в одном окне. Без таблиц в мессенджере.

<section class="rounded-xl bg-white px-6 py-10 dark:bg-slate-900">
  <div class="flex flex-col gap-8 md:flex-row md:items-center">
    <div class="flex-1">
      <h1 class="text-3xl font-semibold tracking-tight text-slate-900 md:text-4xl dark:text-slate-50">
        Всё, что нужно команде
      </h1>
      <p class="mt-3 text-base leading-relaxed text-slate-600 dark:text-slate-400">
        Отчёты, задачи и загрузка команды в одном окне. Без таблиц в мессенджере.
      </p>
      <div class="mt-5 flex flex-wrap gap-3">
        <button class="rounded-md bg-sky-600 px-4 py-2 text-sm font-medium text-white hover:bg-sky-700">Попробовать</button>
        <button class="rounded-md px-4 py-2 text-sm font-medium text-slate-600 hover:bg-slate-100 dark:text-slate-300 dark:hover:bg-slate-800">Как это работает</button>
      </div>
    </div>
    <div class="h-48 flex-1 rounded-xl bg-linear-to-br from-sky-400 via-indigo-500 to-purple-500"></div>
  </div>
</section>

Первый экран с формой подписки

Подпись поля скрыта визуально через sr-only, но доступна скринридеру.

Один короткий разбор в неделю

Без спама. Отписаться можно одним кликом.

<section class="rounded-xl bg-linear-to-br from-slate-900 to-slate-700 px-6 py-10 text-center">
  <h1 class="mx-auto max-w-xl text-2xl font-semibold tracking-tight text-balance text-white md:text-4xl">
    Один короткий разбор в неделю
  </h1>
  <p class="mx-auto mt-3 max-w-prose text-sm text-white/80">Без спама. Отписаться можно одним кликом.</p>
  <form class="mx-auto mt-6 flex max-w-md flex-col gap-2 sm:flex-row">
    <label class="sr-only" for="hero-mail">Электронная почта</label>
    <input id="hero-mail" type="email" placeholder="name@example.com"
           class="min-w-0 flex-1 rounded-md border border-white/20 bg-white/10 px-3 py-2 text-sm text-white
                  placeholder:text-white/60 focus:border-white/50 focus:outline-none">
    <button class="rounded-md bg-white px-4 py-2 text-sm font-medium text-slate-900 hover:bg-slate-100">Подписаться</button>
  </form>
</section>

Разбор

КлассЗачем
px-6 py-12 md:py-16воздух вокруг — на первом экране его нужно больше
text-3xl md:text-5xlзаголовок растёт вместе с экраном
tracking-tightкрупный заголовок нужно уплотнять
text-balanceровные по длине строки заголовка
max-w-proseподзаголовок не растягивается на всю ширину
flex-col sm:flex-rowкнопки в столбик на мобильном
mx-autoцентрирование ограниченных по ширине блоков

Частые ошибки

  • Заголовок на всю ширину экрана: строка длиной 140 знаков не читается.
  • Три кнопки одинаковой важности — непонятно, что делать.
  • Текст поверх картинки без затемняющего слоя: читаемость зависит от изображения.
  • Заголовок задан как div: теряется структура документа.
  • Форма без подписи поля — плейсхолдер её не заменяет.