Верстка сайту з використанням LESS

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Верстка сайту з використанням LESS
Проста
~2-3 робочих дні
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Вёрстка сайту з LESS

LESS — CSS-препроцесор з JavaScript-рантаймом, що працює як у Node.js (збірка), так і в браузері (застарілий підхід). Змінні, миксини, функції, умови, операції з кольорами. Синтаксис ближче до CSS, ніж SCSS. Застосовується в Bootstrap 3/4, Ant Design (до v5), у низці старих проектів. Нові проекти частіше вибирають SCSS, але LESS актуальний при підтримці legacy.

Встановлення та настройка

npm install -D less

Vite підтримує .less з коробки:

// vite.config.ts
import { defineConfig } from 'vite';

export default defineConfig({
  css: {
    preprocessorOptions: {
      less: {
        math: 'always',
        relativeUrls: true,
        // Автоматичний імпорт глобалів в кожен файл
        additionalData: `@import "@/styles/variables.less";`,
      },
    },
  },
});

Змінні

У LESS змінні оголошуються через @ — той самий символ, що й у CSS-директивах, але в іншому контексті:

// styles/variables.less

// Кольори
@color-primary: #2563eb;
@color-primary-dark: #1d4ed8;
@color-primary-light: #eff6ff;
@color-secondary: #7c3aed;
@color-success: #16a34a;
@color-danger: #dc2626;
@color-warning: #d97706;

@color-bg: #f9fafb;
@color-surface: #ffffff;
@color-text-primary: #111827;
@color-text-secondary: #6b7280;
@color-text-muted: #9ca3af;
@color-border: #e5e7eb;

// Типографіка
@font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
@font-size-base: 1rem;
@font-size-sm: 0.875rem;
@font-size-lg: 1.125rem;
@font-size-xl: 1.25rem;
@font-size-2xl: 1.5rem;
@font-size-3xl: 1.875rem;
@font-size-4xl: 2.25rem;
@line-height-base: 1.6;

// Відступи
@space-1: 0.25rem;
@space-2: 0.5rem;
@space-3: 0.75rem;
@space-4: 1rem;
@space-6: 1.5rem;
@space-8: 2rem;
@space-12: 3rem;
@space-16: 4rem;

// Границя та скруглення
@border-radius-sm: 4px;
@border-radius-md: 8px;
@border-radius-lg: 12px;
@border-radius-full: 9999px;

// Breakpoints
@breakpoint-sm: 576px;
@breakpoint-md: 768px;
@breakpoint-lg: 992px;
@breakpoint-xl: 1280px;

Миксини

// 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;
}

// Медіа-запити
.respond-to-sm(@rules) {
  @media (min-width: @breakpoint-sm) { @rules(); }
}
.respond-to-md(@rules) {
  @media (min-width: @breakpoint-md) { @rules(); }
}
.respond-to-lg(@rules) {
  @media (min-width: @breakpoint-lg) { @rules(); }
}
.respond-to-xl(@rules) {
  @media (min-width: @breakpoint-xl) { @rules(); }
}

// Скид кнопки
.reset-button() {
  appearance: none;
  background: none;
  border: none;
  padding: 0;
  margin: 0;
  cursor: pointer;
  font-family: inherit;
}

Компоненти

// components/button.less
@import (reference) "../variables.less";
@import (reference) "../mixins.less";

.btn {
  .flex-center();
  gap: @space-2;
  font-family: @font-family;
  font-weight: 500;
  border: 1px solid transparent;
  cursor: pointer;
  white-space: nowrap;
  text-decoration: none;
  transition:
    background-color 150ms ease,
    border-color 150ms ease,
    transform 100ms ease;

  &:focus-visible {
    outline: 2px solid @color-primary;
    outline-offset: 2px;
  }

  &:active { transform: scale(0.98); }

  &:disabled {
    opacity: 0.5;
    cursor: not-allowed;
    pointer-events: none;
  }

  // Розміри
  &.btn-sm {
    height: 32px;
    padding: 0 12px;
    font-size: @font-size-sm;
    border-radius: @border-radius-sm;
  }

  &.btn-md {
    height: 40px;
    padding: 0 16px;
    font-size: @font-size-base;
    border-radius: @border-radius-md;
  }

  &.btn-lg {
    height: 48px;
    padding: 0 24px;
    font-size: @font-size-lg;
    border-radius: @border-radius-md;
  }

  // Варіанти
  &.btn-primary {
    background: @color-primary;
    color: #fff;
    &:hover:not(:disabled) {
      background: @color-primary-dark;
    }
  }

  &.btn-ghost {
    background: transparent;
    color: @color-primary;
    border-color: @color-primary;
    &:hover:not(:disabled) {
      background: @color-primary-light;
    }
  }

  &.btn-danger {
    background: @color-danger;
    color: #fff;
    &:hover:not(:disabled) {
      background: darken(@color-danger, 10%);
    }
  }

  &.btn-full { width: 100%; }
}

Операції з кольорами

LESS має вбудовані функції для роботи з кольорами:

@base-color: #2563eb;

.palette-example {
  color: lighten(@base-color, 20%);          // Освітлити
  background: darken(@base-color, 10%);       // Затемнити
  border-color: saturate(@base-color, 20%);   // Насичити
  outline: desaturate(@base-color, 50%);      // Обесцвітити
  box-shadow: fade(@base-color, 30%);         // Прозорість
  fill: mix(@base-color, #ff0000, 70%);       // Змішати кольори
}

Вкладеність та амперсанд

.card {
  background: @color-surface;
  border: 1px solid @color-border;
  border-radius: @border-radius-lg;
  padding: @space-6;
  transition: box-shadow 200ms ease;

  // Hover на сам елемент
  &:hover {
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
  }

  // Вкладені елементи
  &__header {
    margin-bottom: @space-4;
    padding-bottom: @space-4;
    border-bottom: 1px solid @color-border;
  }

  &__title {
    font-size: @font-size-xl;
    font-weight: 600;
    color: @color-text-primary;
  }

  &__body {
    font-size: @font-size-base;
    color: @color-text-secondary;
    line-height: @line-height-base;
  }

  // Модифікатор
  &--featured {
    border-color: @color-primary;
    box-shadow: 0 0 0 1px @color-primary;
  }
}

LESS у контексті підтримки Ant Design v4

Ant Design 4.x використовує LESS-змінні для кастомізації. Це основний кейс застосування LESS у нових проектах:

// src/antd-custom.less
@primary-color: #2563eb;
@link-color: #2563eb;
@success-color: #16a34a;
@warning-color: #d97706;
@error-color: #dc2626;
@font-size-base: 14px;
@font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
@border-radius-base: 8px;
@btn-border-radius-base: 8px;
@layout-body-background: #f9fafb;
@layout-header-background: #ffffff;
@layout-header-height: 64px;
// vite.config.ts з modifyVars для Ant Design 4
import { defineConfig } from 'vite';
import { theme } from './src/antd-custom';

export default defineConfig({
  css: {
    preprocessorOptions: {
      less: {
        modifyVars: {
          '@primary-color': '#2563eb',
          '@border-radius-base': '8px',
        },
        javascriptEnabled: true, // Потребує для Ant Design
      },
    },
  },
});

Терміни

Настройка LESS-конфігурації та базових змінних: 1–2 години. Міграція з SCSS на LESS або навпаки: 0.5–1 день для середнього проекту. Вёрстка нової сторінки: порівняна з SCSS. LESS актуальний переважно в legacy-проектах та при інтеграції з Ant Design 4.