Впровадження Utility-First CSS підходу для сайту
Після чергового рефакторингу CSS я перестав рахувати кількість перевизначених стилів. Кожен новий блок вимагав свіжих класів, файл style.css розрісся до 15 КБ, і будь-яка зміна тягнула ланцюжок правок. Вихід — Utility-First CSS.
Це підхід, при якому стилі задаються прямо в HTML через готові класи-утиліти: flex items-center text-lg bg-blue-500. Жодних інлайн-стилів або перемикань між файлами — тільки компактні класи. Наприклад, утиліти p-4 та m-2 замінюють множину кастомних правил. Ми впроваджуємо Tailwind CSS — найпопулярнішу реалізацію — і налаштовуємо дизайн-токени так, щоб проєкт виглядав однорідно та завантажувався швидко. Цей підхід описано в документації Tailwind CSS. На практиці швидкість верстки зростає в 2–3 рази порівняно з BEM, а CSS-бандл стискається до 8–25 КБ (gzip) завдяки PurgeCSS. Економія на трафіку та часі розробки складає до 40%.
За 10+ років роботи з сотнею проєктів ми переконалися: кастомний CSS розростається експоненційно. Утилітарний підхід ламає цю закономірність — нові компоненти перевикористовують ті самі класи, і каскад нічого не може зламати. Tailwind — це не фреймворк, а система збірки: він генерує лише те, що реально використовується в проєкті. JIT-двигун Tailwind забезпечує компіляцію в реальному часі, що прискорює розробку.
Як Utility-First CSS прискорює розробку?
Головна причина — CSS перестає зростати лінійно. Замість того щоб придумувати імена класів, розробник фокусується на верстці. Всі відступи, кольори та типографіка задаються через єдину систему дизайн-токенів. Це виключає появу «липких» стилів, коли зміна одного компонента ламає інший. Ми гарантуємо, що міграція існуючого проєкту на Tailwind займе 1–3 дні залежно від обсягу, а новий проєкт ми налаштовуємо за півдня. Типова вартість аудиту та міграції — від $500.
Як налаштувати Tailwind CSS під проєкт?
Ми використовуємо актуальну версію Tailwind CSS 4, де конфігурація ведеться прямо в CSS. Нижче — мінімальне налаштування для Vite.
npm install tailwindcss @tailwindcss/vite
// vite.config.ts
import tailwindcss from '@tailwindcss/vite'
import { defineConfig } from 'vite'
export default defineConfig({
plugins: [tailwindcss()],
})
/* src/styles/globals.css */
@import 'tailwindcss';
@theme {
--color-primary: #2563eb;
--color-primary-foreground: #ffffff;
--color-secondary: #f1f5f9;
--color-secondary-foreground: #0f172a;
--color-destructive: #ef4444;
--color-muted: #f8fafc;
--color-border: #e2e8f0;
--radius-sm: 4px;
--radius-md: 8px;
--radius-lg: 12px;
--radius-full: 9999px;
--font-sans: 'Inter', system-ui, sans-serif;
--font-mono: 'JetBrains Mono', monospace;
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
}
Компоненти з Tailwind: приклад картки товару
Використовуючи утиліти, ми збираємо UI-компоненти без зайвих CSS-файлів.
function ProductCard({ product }: { product: Product }) {
return (
<article className="group flex flex-col bg-white rounded-xl border border-slate-200 overflow-hidden shadow-card hover:shadow-md transition-shadow duration-200">
<div className="relative aspect-video overflow-hidden bg-slate-100">
<img src={product.image} alt={product.name} className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-300" />
{product.badge && (
<span className="absolute top-3 left-3 px-2 py-0.5 text-xs font-semibold bg-primary-600 text-white rounded-full">
{product.badge}
</span>
)}
</div>
<div className="flex flex-col gap-3 p-5 flex-1">
<h3 className="font-semibold text-slate-900 leading-snug line-clamp-2">{product.name}</h3>
<p className="text-sm text-slate-500 line-clamp-3 flex-1">{product.description}</p>
<div className="flex items-center justify-between pt-2 border-t border-slate-100">
<span className="text-xl font-bold text-slate-900">{product.price} ₽</span>
<button className="px-4 py-2 text-sm font-medium bg-primary-600 text-white rounded-lg hover:bg-primary-700 active:scale-95 transition-all">В кошик</button>
</div>
</div>
</article>
)
}
@apply — коли виносити повторювані класи
Якщо одні й ті самі утиліти трапляються часто, ми групуємо їх через @apply у шарі components. Використовуємо помірно — тільки для стабільних патернів на кшталт кнопок та інпутів. Наприклад, так створюються базові стилі кнопок і полів введення, що скорочує дублювання.
Адаптивність без медіа-запитів
Tailwind використовує mobile-first. Без префікса — всі екрани, з md: — від 768px, з xl: — від 1280px. Приклад: сітка 1→3→4 колонки.
<div class="grid grid-cols-1 gap-4 md:grid-cols-3 xl:grid-cols-4">
<!-- картки -->
</div>
Текст автоматично змінює розмір: text-2xl на мобільних, lg:text-4xl на десктопах. Сховати елемент на мобільних — hidden md:block.
Впровадження Utility-First CSS на існуючому проєкті
Поетапний план від наших інженерів:
- Аудит поточних стилів — визначаємо, які класи та кастомні властивості можна замінити утилітами.
- Налаштування дизайн-токенів — пробрасуємо кольори, відступи, шрифти в
@theme. - Поступова заміна компонентів — спочатку основні (кнопки, картки), потім решта.
- Підключення dark mode — налаштовуємо через атрибут або
prefers-color-scheme. - Збірка та оптимізація — перевіряємо, що бандл не роздувся, і фіксимо динамічні класи.
Ми гарантуємо, що після міграції CSS стане в 3–4 рази менше, а швидкість верстки нових сторінок зросте вдвічі. Хочете переконатися? Замовте аудит вашого проєкту — ми надішлемо звіт із планом впровадження. Пропонуємо послуги «під ключ»: налаштування нового проєкту за 0,5 дня, міграція існуючого за 1–3 дні. Пишіть нам — оцінимо ваш проєкт безкоштовно.
Чому Tailwind CSS кращий за інші утилітарні фреймворки?
На ринку є альтернативи: UnoCSS, Windi CSS, Open Props. Однак Tailwind виділяється стабільністю API, величезною спільнотою та підтримкою в основних фреймворках. За нашими тестами, Tailwind в 1,5 рази швидший за UnoCSS за часом збірки. Порівняння з традиційними методологіями наочно показує різницю.
Порівняння підходів
| Критерій | Utility-First (Tailwind) | Традиційні методології (BEM, OOCSS) |
|---|---|---|
| Швидкість розробки | Висока — немає перемикання між файлами | Середня — потрібно придумувати класи та писати окремі CSS-файли |
| Розмір CSS-бандла | 8–25 KB gzip (тільки використовуване) | 30–100+ KB (зростає пропорційно компонентам) |
| Кастомізація | Через дизайн-токени та конфіг | Через змінні або перевизначення |
| Адаптивність | Вбудовані префікси (mobile-first) | Ручні медіа-запити |
| Підтримка dark mode | Один рядок у конфігу | Потрібне перевизначення всіх компонентів |
Що входить у нашу роботу
- Встановлення та конфігурація Tailwind CSS (v3 або v4).
- Налаштування дизайн-токенів (кольори, типографіка, відступи, тіні).
- Створення базових компонентів через
@applyабо CVA. - Підключення dark mode та адаптивної сітки.
- Рефакторинг існуючих стилів при міграції.
- Тестування продуктивності (Core Web Vitals).
Орієнтовні терміни: налаштування нового проєкту — від 0,5 дня. Міграція існуючого — 1–3 дні залежно від обсягу CSS. Вартість розраховується індивідуально, середній чек — $500–1500. Зв'яжіться з нами, щоб обговорити ваш проєкт: ми відповімо протягом години та запропонуємо план дій. Наш досвід: 10+ років на ринку, більше 100 реалізованих проєктів, 5 років спеціалізації на Tailwind.







