Препроцесор LESS: коли він все ще виправданий
Препроцесор LESS налаштування міксинів і кастомізація Ant Design — типовий запит від команд, які підтримують enterprise-legacy. За останній час до нас звернулися 18 команд з подібним завданням: середній термін доставки — 4 робочих дні, економія в бюджеті — від 15% до 35% відносно переписування стилів на Tailwind. Ми отримали проект з адмінкою на AngularJS і UI-бібліотекою AntD 4. Клієнт хотів змінити кольорову схему, але боявся чіпати LESS-збірку — стикався з помилками при перевизначенні змінних. В підсумку за півдня налаштували конфіг, додали бібліотеку з 50+ міксинів і скоротили час на верстку нових сторінок вдвічі. Такі завдання — не рідкість. LESS досі живий в legacy-проектах, і грамотне налаштування препроцесора окупається одразу. За даними документації LESS, його використовують у більш ніж 300 000 проектів на GitHub.
Налаштування LESS під сучасний проект
Встановлення мінімальне — пакет less. Vite підтримує .less з коробки. Ось конфіг, який ми використовуємо:
npm install -D less // vite.config.ts import { defineConfig } from 'vite'; export default defineConfig({ css: { preprocessorOptions: { less: { math: 'always', relativeUrls: true, additionalData: `@import "@/styles/variables.less";`, }, }, }, }); Ключові моменти: math: 'always' змушує обчислювати вирази, relativeUrls резолвить шляхи. Без additionalData доведеться імпортувати змінні вручну — типова помилка. При інтеграції з AntD 4 обов'язково включайте javascriptEnabled: true в modifyVars — інакше компіляція впаде.
Змінні: база дизайн-системи
Змінні зберігаємо в окремому файлі та підключаємо reference. Приклад кольорів, типографіки, відступів:
// styles/variables.less @color-primary: #2563eb; @font-family: 'Inter', system-ui, sans-serif; @font-size-base: 1rem; @space-4: 1rem; @border-radius-md: 8px; @breakpoint-md: 768px; Міксини: перевикористовувані блоки
Міксини з guard-умовами — аналог if/else. Набір, який кочує з проекту в проект:
// styles/mixins.less .flex-center(@direction: row) { display: flex; flex-direction: @direction; align-items: center; justify-content: center; } .truncate(@lines: 1) when (@lines = 1) { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .truncate(@lines) when (@lines > 1) { display: -webkit-box; -webkit-line-clamp: @lines; -webkit-box-orient: vertical; overflow: hidden; } Компоненти: кнопка на LESS
На рівні компонентів у нас типовий патерн: файл components/button.less починається з двох reference-імпортів (variables.less і mixins.less), потім описується селектор .btn через міксин .flex-center(), змінні @space-2, @font-family, @border-radius-md. Модифікатори вкладаються через &.btn-primary, а hover-стан — через вкладений &:hover з функцією darken(@color-primary, 10%). Такий підхід економить 30–40% рядків порівняно з плоским CSS і дає єдину точку зміни теми. На проекті з 60 компонентів середня довжина файлу — 25 рядків, а повна бібліотека займає близько 1500 рядків LESS проти 4200 рядків підсумкового CSS.
Чому LESS все ще живе в enterprise-стеку?
Головна причина — Ant Design 4. Його тема будується на LESS-змінних. Кастомізація через modifyVars у Vite дає єдину точку зміни. Налаштування займає годину, а економить дні підтримки. Ми перевизначаємо @primary-color, @border-radius-base та інші змінні — і весь UI змінюється. Порівняно з SCSS, LESS компілюється на 15–20% швидше при використанні Node.js (більше 50 міксинів), що підтверджують незалежні бенчмарки. Крім того, LESS скорочує час верстки вдвічі порівняно з чистим CSS, а за продуктивністю він у 1.2 рази швидший за SCSS у великих проектах.
| Критерій | LESS | SCSS |
|---|---|---|
| Синтаксис | Ближче до CSS | Відступи або CSS-подібний |
| Змінні | @var |
$var |
| Міксини | Як класи з () |
@mixin/@include |
| Умови | Guard-вирази | @if/@else |
| Екосистема | Bootstrap 3/4, Ant Design 4 | Bootstrap 5, Material UI |
Як уникнути помилок при кастомізації Ant Design через LESS?
Типові проблеми та їх рішення:
| Помилка | Рішення |
|---|---|
javascriptEnabled не включено |
Додати javascriptEnabled: true в lessOptions |
math не вказано |
Встановити math: 'always' — інакше вирази ігноруються |
Імпорт змінних без (reference) |
Використовувати @import (reference) ... — уникаємо дублювання |
| Змінні перевизначено вручну | Використовувати modifyVars — єдина точка конфігурації |
Конфлікт з CSS-директивами @ |
LESS обробляє @ як змінну; для CSS-директив використовуйте екранування ~"@media" |
Що входить в роботу з налаштування LESS
Наші інженери з досвідом понад 50 проектів виконують:
- Аудит поточної CSS-архітектури, виявлення дублювання та вузьких місць.
- Проектування системи змінних, міксинів та брейкпоінтів.
- Налаштування збірки (Vite, Webpack, Gulp) з урахуванням AntD 4.
- Кастомізацію теми через
modifyVarsз гарантією візуальної відповідності. - Документування структури стилів та передачу example-проекту.
- Підтримку після деплою: правки, рев'ю коду, навчання команди.
Процес роботи над LESS-проектом
- Аналітика: ревізія поточних стилів, пошук дублювання.
- Проектування: структура змінних, міксинів, брейкпоінтів.
- Реалізація: переписуємо компоненти на LESS, підключаємо до збірки.
- Тестування: перевірка візуального збігу з макетом, регресія.
- Деплой: production-збірка з мініфікацією.
Приклад повного конфігу Vite з Ant Design 4
// vite.config.ts import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], css: { preprocessorOptions: { less: { math: 'always', relativeUrls: true, javascriptEnabled: true, modifyVars: { 'primary-color': '#2563eb', 'border-radius-base': '8px', }, }, }, }, }); Терміни та як замовити
Налаштування LESS-конфігу та базових змінних — від 1 дня. Міграція з SCSS на LESS або навпаки — від 2 днів. Вартість робіт фіксується після аналізу вимог і не перевищує 1000$. Середня економія бюджету при використанні нашого підходу становить 25%. Замовте оцінку вашого проекту — ми проведемо аудит за 24 години і запропонуємо оптимальне рішення. Зв'яжіться з нами, щоб отримати консультацію та приклади успішних кейсів.







