Урок 03. Решения

📁 Раздел: Введение ⏱️ Время изучения: ~50 мин 🎯 Сложность: Начальная

⚡ Кратко

Разбор трёх заданий с готовым кодом и объяснением, что именно происходит в сборке.

Решение задания 1

📄 src/style.css
@import "tailwindcss";

@theme {
  --color-ocean-500: oklch(0.62 0.13 220);
}

В собранном CSS появятся, среди прочих:

.bg-ocean-500     { background-color: var(--color-ocean-500); }
.text-ocean-500   { color: var(--color-ocean-500); }
.border-ocean-500 { border-color: var(--color-ocean-500); }
.ring-ocean-500   { --tw-ring-color: var(--color-ocean-500); }

Важно: правило появится только для тех утилит, которые вы реально использовали в разметке. Токен даёт возможность, а генерация по-прежнему идёт от найденных классов.

Решение задания 2

📄 src/style.css
@import "tailwindcss";
@source "../partials";
npx @tailwindcss/cli -i ./src/style.css -o ./dist/out.css
grep "bg-emerald-100" ./dist/out.css

Почему так: каталог partials лежит вне автоматически сканируемого дерева (или исключён гитом), поэтому источник добавляется явно. Путь в @source считается относительно файла CSS.

Решение задания 3

Класс собирается во время выполнения программы, а сканер работает до неё и видит только строки "bg-", "-" и переменные. Целого имени bg-emerald-500 в файле нет — правило не сгенерируется.

✅ Исправление: полные имена в коде

const TONES = {
  emerald: "bg-emerald-500",
  rose: "bg-rose-500",
  slate: "bg-slate-500",
}
element.className = TONES[tone]

Вариант для случаев, когда значение приходит с сервера и в коде его нет физически, — перечислить классы в @source inline(…):

@source inline("bg-emerald-500 bg-rose-500 bg-slate-500");
emerald rose slate
<div class="flex gap-2">
  <span class="rounded-md bg-emerald-500 px-3 py-1.5 text-sm text-white">emerald</span>
  <span class="rounded-md bg-rose-500 px-3 py-1.5 text-sm text-white">rose</span>
  <span class="rounded-md bg-slate-500 px-3 py-1.5 text-sm text-white">slate</span>
</div>