Когда я впервые попробовал Sass на проекте, первое, что я захотел сделать, — создать переменные для всех цветов. Я уже знал, что следует избегать имен, подобных .header-blue-left-bottom, потому что цвет и положение этого элемента могут измениться. Лучше делать упор на сущность вещей, нежели на их внешний вид.

Поэтому я попытался сделать имена цветов семантическими:

$mainBrandColor: #F060D6;
$secondaryFocus: #4C9FEB;
$fadedHighlight: #F1F3F4;

Но очень быстро я обнаружил, что не могу их запомнить. Приходилось постоянно подсматривать туда, где я их определил. Это быстро надоело и я вернулся к привычному виду:

$orange: #F060D6;
$red: #BB532E;
$blue: #4C9FEB;

$gray-1: #eee;
$gray-2: #ccc;
$gray-3: #555;

Это гораздо более интуитивное представление, если, конечно, не считать некоторых негативных побочных эффектов. Но в конце концов, все это находится в CSS и предназначено только для разработчиков, так что проблема не такая уж и большая.

Также я пытался хранить цвета в мапе:

$colors: (
  light: #ccc,
  dark: #333
);

Но единственная определенная цель такой структуры — очищение глобального пространства имен. Вероятно, это не стоит хлопот, связанных с необходимостью все время получать цвет из мапа (map-get). Пространства имен, такие как $-c-orange, вероятно, более простой подход для этого.

Большей частью я придерживаюсь этого подхода в Sass (просто-используй-названия-цветов). Он также прекрасно может существовать в виде пользовательских свойств CSS:

:root {
  -c-orange: #F060D6;
  -c-red: #BB532E;
  -c-blue: #4C9FEB;

  -c-gray-1: #eee;
  -c-gray-2: #ccc;
  -c-gray-3: #555;
}

Можно добавить немного больше конкретики, сохраняя при этом абстрактность, как советует Marcus Ortense:

$color-primary:
$color-primary-dark:
$color-primary-light:

А вот подход Mike Street с базовыми цветами и их вариациями:

$primary:
$primaryLight: 
$primaryDark:

$secondary:
$secondaryLight:
$secondaryDark:

$neutralDarker:
$neutrayDark:
$neutral:
$neutralLight:
$neutralLighter: 
$neutralLightest:

Недавно Silvestar Bistrović писал об использовании абстрактной греческой нумерации:

$color-alpha: #12e09f;
$color-beta: #e01258;
$color-gamma: #f5f5f5;
$color-psi: #1f1f1f;
$color-omega: #fff;

Я раньше использовал такой подход для медиа-запросов, так как нумерация, похоже, имеет смысл (маленькие числа — это маленькие экраны, большие числа — большие экраны). Это удобно для оттенков цвета, почему бы и с обычными числами не попробовать?

Еще один популярный подход — совмещение имени цвета с абстрактными именами. Так делает Geoff и John Carroll:

$color-danube: #668DD1;
$color-cornflower: $6195ED;
$color-east-bay: $3A4D6E;

// theme1.scss
$color-alpha: $color-danube;
$color-bravo: $color-cornflower;
$color-charlie: $color-east-bay;

// theme2.scss
$color-alpha: $color-cornflower;
$color-bravo: $color-danube;
$color-charlie: $color-east-bay;

Вы можете сами определить необходимую степень подробности и даже добавить варианты вне палитры:

$table-row-background: lighten($color-background, 10%);

Stuart Robson даже добавляет немного БЭМа:

$ns-color__blue—dark: rgb(25,25,112); 
$ns-brand__color—primary: $ns-color__blue—dark;

// component.scss
$ns-component__color—text: $ns-brand__color—primary;

В Material Desing используются значения, которые похожи на font-weight! У вас есть базовый диапазон цветов + некоторые альтернативы:

$light-green-100:
$light-green-200:
$light-green-300:
// etc
$light-green-900:
$light-green-A200:
$light-green-A400:

$deep-purple-100:
$deep-purple-200:
$deep-purple-300:
// etc
$deep-purple-A900:

А как вы выбираете имена для переменных цветов?

Полезные ссылки

Если вы получаете удовольствие, отделяя солнечно-желтый цвет (sunny yellow) от подсолнечно-желтого (sunflower yellow), то загляните сюда или сюда:

See the Pen Color Namer by Maneesh (@maneeshc) on CodePen.

Существует даже плагин Sublime Text для преобразования форматов цветов в любой синтаксис:

0 комментариев

Оставить комментарий

*Доступные HTML-теги: a, abbr, blockquote, code, pre, del, i, em, strong, b, strike
*Не будет опубликован