Гид по технологиям

Функции в Less CSS: руководство и примеры

6 min read Веб-разработка Обновлено 10 Apr 2026
Функции Less CSS: руководство и примеры
Функции Less CSS: руководство и примеры

Логотип Less CSS поверх изображения человека за MacBook

Краткое введение в Less

Less CSS — это препроцессор CSS, который добавляет переменные, вложенность, миксины и функции поверх классического CSS. Если вы знакомы с «vanilla» CSS, переход к Less обычно не требует резкой пересадки — синтаксис близок, а преимущества ощутимы при работе с крупными стилевыми базами.

Определение: Функция — это блок кода, который принимает параметры, обрабатывает их и возвращает значение; в Less функции применяются прямо в местах определения свойств.

Важно: препроцессор работает на этапе сборки (или в браузере при подключении компилятора), поэтому итоговый браузерный CSS не содержит вызовов функций — остаются только вычисленные значения.

Что такое функции и зачем они нужны

В программировании функция выполняет определённую задачу и может быть вызвана многократно. Она снижает дублирование логики и улучшает читаемость. В Less это выражается в том, что вы можете вычислять значения, выбирать варианты по условию и манипулировать строками и списками прямо в стилях.

Пример на JavaScript (для понимания концепции, код оставлен как в исходнике):

function checkDiscount(price, threshold){  
    if (price >= threshold){  
        let discount = 5/100 * price;  
        return `Your discount is $${discount}`;  
    } else {  
        return `Sorry, this item does not qualify for a discount. `  
    }  
}  

Этот пример показывает общую идею: вы выносите логику в одну функцию и затем переиспользуете её.

Понимание функций в Less

В обычном CSS набор функций ограничен (например, calc()). Less добавляет более мощные функции: условные, строковые, для списков и т. д.

Пример использования calc в CSS (для сравнения):

p{  
    background-color: red;  
    width: calc(13px - 4px);  
}  

В Less есть функция if, принимающая условие и два результата:

@width: 10px;  
@height: 20px;  
div{  
    margin:if((@width > @height), 10px, 20px)  
}  

После компиляции получим:

div {  
    margin: 20px;  
}  

Пояснение: Less сравнивает значения и возвращает первый аргумент (10px), если выражение истинно, иначе — второй (20px).

Важно: Less выполняет сравнения в момент компиляции, поэтому условие должно быть вычислено до генерации итогового CSS.

Логические значения в Less

Boolean — это значение true или false. Функция boolean() позволяет преобразовать выражение в логическое значение и сохранить его в переменной:

@text-color: red;  
@bg-color: boolean(@text-color = red);  

Затем это значение можно использовать в условной конструкции:

div{  
    background-color: if(@bg-color,green,yellow);  
}  

Результат компиляции:

div {  
  background-color: green;  
}  

Замена текста в строке с помощью replace()

Синтаксис:

replace(string, pattern, replacement, flags)  
  • string — исходная строка;
  • pattern — искомая подстрока или регулярное выражение;
  • replacement — строка‑замена;
  • flags — необязательный параметр для флагов регулярного выражения.

Пример:

@string: "Hello";  
@pattern: "ello";  
@replacement: "i";  
  
div::before{  
    content: replace(@string,@pattern,@replacement)  
}  

После компиляции:

div::before {  
  content: "Hi";  
}  

Совет: при использовании регулярных выражений передавайте fourth‑параметр flags для глобального поиска или нечувствительности к регистру.

Функции для работы со списками

В Less список задаётся через запятые или пробелы:

@groceries: "bread", "banana", "potato", "milk";  

length() возвращает количество элементов списка:

@result: length(@groceries);  

extract() получает элемент по позиции (в Less индексация начинается с 1):

@third-element: extract(@groceries, 3);  

range(start, end, step) генерирует список значений с шагом step (по умолчанию step = 1). В Less range чаще используется для генерации наборов значений, которые затем можно применить как шорткап для свойств с несколькими аргументами:

div {  
    margin: range(10px, 40px, 10);  
}  

Компиляция даст:

div {  
 margin: 10px 20px 30px 40px;  
}

Пояснение: range начинает с 10px, затем 20px, 30px и заканчивает 40px.

Практический проект: простая страница с Less-функциями

Соберём всё вместе. Создайте папку с index.htm и style.less.

index.htm (фрагмент):

  
  
  
      
      
      
    Document  
  
  
      
        

        

    

Обратите внимание: без тега script браузер не будет компилировать Less на лету. Для продакшена лучше компилировать .less в .css заранее, используя lessc.

Установка через npm:

npm install -g less  

Компиляция файла:

lessc style.less style.css  

Файл style.less (пример из статьи):

@container-width: 50rem;  
@container-bg-color: yellow;  

@string: "Hello from the children of planet Earth!";  
@pattern: "children of planet Earth!";  
@replacement: "inhabitants of Pluto!";  
  
.container{  
    width: @container-width;  
    background-color: @container-bg-color;  
    padding: if(@container-width > 30rem, range(20px, 80px, 20),"");  
    border: solid;  
}  
  
h1:first-child::after{  
    content: replace(@string,@pattern,@replacement);  
}  

Ожидаемый результат после компиляции:

.container {  
  width: 50rem;  
  background-color: yellow;  
  padding: 20px 40px 60px 80px;  
  border: solid;  
}  
h1:first-child::after {  
  content: "Hello from the inhabitants of Pluto!";  
}  

Скриншот готового проекта

Повышение продуктивности с препроцессорами

Функции и структуры препроцессоров уменьшают объём копипасты, упрощают рефакторинг и делают стили более предсказуемыми. Особенно это заметно в больших проектах, где повторяющиеся паттерны и наборы свойств должны поддерживаться на протяжении времени.

Когда функции Less не подходят

  • Вам нужен нативный CSS для старых рабочих процессов, где сборка невозможна.
  • Ограничения совместимости с инструментами: некоторые сборщики/CI в проекте могут не поддерживать Less по умолчанию.
  • Если логика слишком сложная — возможно, лучше генерировать CSS из JavaScript/TypeScript или использовать CSS‑in‑JS.

Альтернатива: Sass (SCSS) — более распространённый препроцессор с похожим набором возможностей; выбор часто обусловлен экосистемой и личными предпочтениями.

Ментальные модели и эвристики при использовании функций

  • Думайте о Less как о простом слое компиляции: всё вычисляется заранее.
  • Выносите значение, которое может измениться, в переменную.
  • Используйте функции для «полиморфных» значений: если одно свойство может иметь несколько вариантов — применяйте if/boolean.
  • Ограничьте сложную логику в стилях: если условие требует доступа к runtime‑данным, решайте это в JavaScript.

Мини‑методология: как вводить функции Less в проект (шаги)

  1. Идентифицируйте повторяющиеся значения и паттерны (цвета, отступы, наборы шрифтов).
  2. Вынесите их в переменные и миксины.
  3. Протестируйте замену дублирующего кода функциями, например if или range.
  4. Компилируйте и проверяйте итоговый CSS на совпадение с ожидаемым поведением.
  5. Документируйте самые используемые функции в README стайлгайда.

Чек-листы по ролям

Разработчик (frontend):

  • Выделил переменные для повторяющихся значений.
  • Проверил, что файлы .less компилируются в чистый .css без ошибок.
  • Обновил сборку CI для компиляции Less.

Дизайнер:

  • Согласовал систему отступов и масштаб (rem, px).
  • Проверил визуальный результат после компиляции на основных устройствах.

Техлид:

  • Утвердил правила использования функций (когда использовать, когда нет).
  • Отслеживает влияние на производительность сборки.

Шпаргалка функций (быстрый чек)

  • if(cond, a, b) — условный оператор;
  • boolean(expr) — возвращает true/false;
  • replace(str, pattern, replacement, flags?) — замена в строке;
  • length(list) — длина списка;
  • extract(list, index) — элемент по 1‑based индексу;
  • range(start, end, step?) — набор значений.

Примеры ошибок и как их избегать

  • Ошибка: ожидание runtime‑переменных в Less. Решение: вычисляйте подобные значения в JavaScript и применяйте классы или инлайновые стили.
  • Ошибка: сложные регулярные выражения в replace(), которые ведут к неожиданным результатам. Решение: тестируйте replace() локально и при необходимости используйте escape для спецсимволов.

Критерии приёмки

  • Все .less файлы компилируются без ошибок.
  • Итоговый CSS соответствует дизайну.
  • Переменные и функции задокументированы в проектном README.
  • CI собирает и валидирует CSS при каждом pull request.

Быстрый глоссарий

  • Less: препроцессор CSS;
  • Миксин: переиспользуемый блок стилей;
  • Переменная: именованное значение, используемое в стилей;
  • Компиляция: процесс преобразования .less в .css.

Решение для выбора инструмента — простое дерево

flowchart TD
  A[Нужен препроцессор?] -->|Да| B{Есть опыт в команде}
  B -->|Да: предпочитают JS| C[Less]
  B -->|Да: предпочитают Ruby/шире экосистема| D[Sass/SCSS]
  B -->|Нет| E[Оценить обе: PoC и тесты]
  A -->|Нет| F[Оставить чистый CSS]

Заключение

Less добавляет мощные функции в стили, делая код чище и проще в сопровождении. Он особенно полезен для проектов с большим количеством повторяющихся паттернов. Однако важно не переносить в стили всю бизнес‑логику: оставляйте runtime‑решения для JavaScript, а в Less держите предсказуемые, компилируемые вычисления.

Итоговые рекомендации:

  • Начните с небольших шагов: вынесите переменные и простые функции;
  • Документируйте соглашения стилей;
  • Используйте автоматическую сборку и тестирование, чтобы гарантировать стабильность.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Папка автозагрузки Windows — найти и управлять
Windows

Папка автозагрузки Windows — найти и управлять

Отключить исчезновение окон в macOS Sonoma
macOS

Отключить исчезновение окон в macOS Sonoma

Отключить клавишу Globe на Mac
macOS

Отключить клавишу Globe на Mac

Отключить миниатюры скриншотов на Mac
macOS

Отключить миниатюры скриншотов на Mac

RAW в JPEG на Mac — через Preview
Фото

RAW в JPEG на Mac — через Preview

Удалить фон с фото на Mac — быстро и без программ
macOS

Удалить фон с фото на Mac — быстро и без программ