Цвет — один из важнейших элементов любого визуального дизайна. При правильном использовании он может оказать большое влияние на ваш веб-сайт или приложение. Но знание только теории цвета недостаточно для достижения такого эффекта. Вы должны иметь правильный инструментальный пояс, чтобы легко и успешно работать с множеством цветов. К счастью, Less решает эту практическую проблему, предоставляя множество цветовых функций для работы.
В этом уроке я расскажу, как использовать некоторые из этих цветовых функций в сочетании с другими функциями Less для создания гибких и многократно используемых смесей для управления цветом.
Создание цветовых схем
При попытке создать цветовые схемы с помощью Less большинство людей используют наиболее очевидный подход, который выглядит следующим образом:
@base-color: #00ff00;
@triad-secondary: spin(@base-color, 120);
@triad-tertiary: spin(@base-color, -120);
Этот метод использует переменные и функцию spin()
Это прекрасно работает, но для меня это не особенно многоразового использования и не достаточно гибким. К счастью, проблему можно решить с помощью миксинов. Посмотрим, что я имею в виду.
.analog(@color, @variant, @property) {
@first: spin(@color, 30);
@second: spin(@color, -30);
@list: @first, @second;
@return: extract(@list, @variant);
@{property}: @return;
}
.triad(@color, @variant, @property) {
@first: spin(@color, 120);
@second: spin(@color, -120);
@list: @first, @second;
@return: extract(@list, @variant);
@{property}: @return;
}
.quad(@color, @variant, @property) {
@first: spin(@color, 90);
@second: spin(@color, -90);
@third: spin(@color, 180);
@list: @first, @second, @third;
@return: extract(@list, @variant);
@{property}: @return;
}
Приведенный выше код создает три типа цветовых схем. Я объясню только последний, потому что первые два имеют одинаковую структуру и им не нужны индивидуальные объяснения.
.quad()
Первый устанавливает базовый цвет для схемы. Второй говорит миксину, какой цветовой вариант вернуть. И третий определяет, какое свойство CSS использовать, когда Less компилирует код. Внутри тела миксина функция spin()
Функция extract()
И, наконец, с помощью интерполяции переменных цветовой вариант назначается определенному свойству CSS.
Теперь мы можем поместить приведенный выше код в отдельный файл с именем color_schemes.less
@import "color_schemes.less";
@base-color: #00ff00;
div {
width: 200px;
height: 100px;
border: thick solid;
.quad(@base-color, 3, border-color);
.quad(@base-color, 2, color);
.quad(@base-color, 1, background-color);
}
Здесь мы импортируем файл с цветовыми схемами, а затем определяем основной цвет для нашего веб-сайта или приложения. Последние три строки в наборе правил div
border-color
color
background-color
Как видите, миксин можно использовать с любым свойством, ожидаемое значение которого — цвет. Кроме того, очень легко увидеть, для какого свойства используется конкретный оператор; просто посмотрите на конец, и бум, мы это знаем. Например, в последнем утверждении вы можете ясно видеть, что первый вариант цвета четырехугольной схемы будет использоваться в качестве значения свойства background-color
Довольно круто, а?
И вот скомпилированный вывод:
div {
/* ... etc... */
border-color: #ff00ff;
color: #ff8000;
background-color: #007fff;
}
Генерация цветовых палитр
В этом разделе я покажу вам, как создавать различные типы цветовых палитр. Для этой цели я буду использовать менее специфичные циклы и условные выражения (mixin guard). Если вы не знакомы с этими конструкциями, вы можете быстро взглянуть на мои предыдущие статьи на эти темы.
В первом примере я создам миксин, который создает таблицу цветов. Вы использовали палитру цветов, верно? Итак, вы знаете, что я имею в виду.
.color-palette(@color, @swatches, @step, @index: 0) when (@index =< (@swatches - 1)) {
.swatch-@{index} {
background-color: spin(@color, (@index * @step));
}
.color-palette(@color, @swatches, @step, (@index + 1));
}
.color-palette(#ff0000, 25, 15);
.color-palette()
Первый определяет основной цвет для палитры. Второй определяет, сколько образцов генерировать. А третий задает шаг вращения, необходимый для функции spin()
На самом деле, есть еще один аргумент: @index
Но он используется только внутри, чтобы заставить цикл работать. Как установлено в приведенном выше коде, цикл будет 25 раз перебирать код, создавая 25 классов CSS — по одному на каждый образец. Каждое имя класса будет построено по .swatch-[number]
.swatch-1
Цвет для каждого образца генерируется с использованием значения, полученного в результате умножения текущего индекса на шаг вращения. Это значение добавляется к значению основного цвета для каждой итерации цикла. Это дает полный спектр цветов, начиная и заканчивая одним и тем же цветом (в нашем случае красным).
Вот скомпилированный вывод:
.swatch-0 {
background-color: #ff0000;
}
.swatch-1 {
background-color: #ff4000;
}
/* ...etc... */
.swatch-23 {
background-color: #ff0040;
}
.swatch-24 {
background-color: #ff0000;
}
Этот миксин можно использовать для создания любой таблицы цветов — с любым количеством образцов и с большим или меньшим шагом вращения. Например, вы можете сгенерировать только четыре образца с шагом вращения 90 градусов, что даст образцы для квадратной цветовой схемы. У вас есть бесконечные возможности. Просто иди и делай свои собственные эксперименты.
В следующем примере мы создадим миксин, который производит оттенки и оттенки определенного цвета. Согласно Википедии :
оттенок — это смесь цвета с белым, которая увеличивает яркость, а оттенок — это смесь цвета с черным, которая уменьшает яркость.
Как мы увидим через минуту, оттенки и тени могут быть легко созданы с помощью встроенных функций Less’s lighten()
darken()
.color-palette(@type, @color, @index: 0) when (@index =< 9) {
& when (@type = 'tints') {
.swatch-@{index} {
background-color: lighten(@color, (@index * 10%), relative);
}
}
& when (@type = 'shades') {
.swatch-@{index} {
background-color: darken(@color, (@index * 10%), relative);
}
}
.color-palette(@type, @color, (@index + 1));
}
.color-palette('shades', #ff00ff);
Эта версия .color-palette()
Чтобы сделать возможным переключение между оттенками и оттенками, оператор &
when
Это означает, что если мы используем «оттенки» в качестве первого параметра, будет использован код с функцией darken()
Цвет фона в обоих случаях генерируется функцией lighten()
darken()
Обратите внимание на relative
Важно включить его, чтобы корректировка относилась к текущему значению.
Примечание: не беспокойтесь, что два миксина имеют одно и то же имя. Благодаря функции сопоставления с образцом , Less будет знать, какой использовать.
Вот скомпилированный вывод:
.swatch-0 {
background-color: #ff00ff;
}
.swatch-1 {
background-color: #e600e5;
}
/* ...etc... */
.swatch-9 {
background-color: #190019;
}
Резюме
Есть много других вещей, которые вы можете делать с цветами и с большим количеством цветовых функций, предоставляемых Less. Но вы не хотите учебник из 10000 слов, верно? Приведенных примеров достаточно, чтобы начать работу и дать обзор доступных возможностей. Вам решать погрузиться глубже и продолжить экспериментировать. Счастливого Меньшего Кодирования!