Модуль colors

В Berry CSS цвета делятся на фиксированные и яркостные палитры. Они основаны на css-переменных.

Фиксированный цвета задаются в виде css-переменных:

:root {
    --white: #FFFFFF;
    --black: #000000;

    --color1: #1B542C;
    --color2: #026A52;
    --color3: #21888F;
    --color4: #296478;
    --color5: #4D668E;
    --color6: #2B2C7C;
    --color7: #992572;
    --color8: #933D50;
    --color9: #AC323B;
}

Палитры образуются из опорного цвета, который задаётся в виде Hue и Saturation в модели HSL.

:root {
    --primary-hue: 216deg; /* For Material Design */
    --primary-sat: 33%;
    
    --gray-hue: var(--primary-hue);
    --gray-sat: 7%;    
    
    --red-hue: 5deg;
    --red-sat: 60%;
    
    --brown-hue: 16deg;
    --brown-sat: 31%; 
    
    --orange-hue: 31deg;
    --orange-sat: 75%;
                     
    --yellow-hue: 48deg;
    --yellow-sat: 88%;
                     
    --lime-hue: 57deg;
    --lime-sat: 80%;

    --green-hue: 102deg;
    --green-sat: 34%;
                     
    --teal-hue: 172deg;
    --teal-sat: 30%;
                     
    --cyan-hue: 200deg;
    --cyan-sat: 45%;
                     
    --blue-hue: 218deg;
    --blue-sat: 50%;
                     
    --indigo-hue: 238deg;
    --indigo-sat: 35%;
                     
    --violet-hue: 264deg;
    --violet-sat: 36%;
                     
    --purple-hue: 304deg;
    --purple-sat: 29%;
                     
    --pink-hue: 334deg;
    --pink-sat: 46%;
}
Исходные (опорные) цвета всех палитр Berry CSS — это цвета каталога RAL.

Создаваемые цвета палитры будут иметь те же значения, но разную яркость (Lightness). Палитра представляет собой градацию от яркости 50 до 950 с шагом 50. Каждый цвет создаётся следующим образом («яркостная шкала»):

:root {
    --ЦВЕТ950: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 9%);
    --ЦВЕТ900: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 13%);
    --ЦВЕТ850: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 17%);
    --ЦВЕТ800: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 21%);
    --ЦВЕТ750: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 26%);
    --ЦВЕТ700: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 31%);
    --ЦВЕТ650: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 36%);
    --ЦВЕТ600: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 41%);
    --ЦВЕТ550: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 46%);
    --ЦВЕТ500: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 50%);
    --ЦВЕТ450: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 54%);
    --ЦВЕТ400: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 59%);
    --ЦВЕТ350: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 65%);
    --ЦВЕТ300: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 70%);
    --ЦВЕТ250: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 75%);
    --ЦВЕТ200: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 81%);
    --ЦВЕТ150: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 86%);
    --ЦВЕТ100: hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 91%);
    --ЦВЕТ50:  hsl(var(--ЦВЕТ-hue) var(--ЦВЕТ-sat) 96%);
    --ЦВЕТ:    var(--ЦВЕТ500);
}

- где ЦВЕТ это один из вариантов: "primary", "gray", "red", "brown", "orange", "yellow", "lime", "green", "teal", "cyan", "blue", "indigo", "violet", "purple", "pink".

Все эти css-переменные используются в многочисленных классах цветов. Для того, чтобы переопределить цветовую палитру, достаточно переопределить соответствующие css-переменные --{цвет}-hue и --{цвет}-sat, например для красной палитры:

:root {
    --red-hue: 8deg;
    --red-sat: 42%;
}

Это автоматически переопределит всю яркостную палитру red под цветовой тон пользователя.

Точно также можно переопределить любую другую css-переменную любого цвета.

Контраст цветов

При верстке нужно следить за степенью яркостной контрастности. Предполагается, что цвета, которые имеют разницу в 100 единиц, например primary300 и primary400, имеют примерно 10% разность в яркости. С точки зрения читабельности текста (рекомендация WCAG), текст должен иметь разницу примерно 40-50%, что соответствует разности в 400..500 единиц Berry CSS, например primary300 и primary700 будут иметь хороший контраст.

  • Разница в 100-200 по Berry CSS (10%-20% lightness) — слабый контраст.
  • Разница в 300-400 (30%-40%) — хороший контраст.
  • Разница 500 и больше — высокая читаемость.
<div class="t-primary100 bg-primary200 pad15 rounded5">
  Контрастность +100 (близкие цвета)
</div>

<div class="t-primary100 bg-primary600 pad15 rounded5">
  Контрастность +500 (высокий контраст)
</div>

Верстка Material Design

Концепция Material Design предполагает использование палитры primary при верстке. В Berry CSS в качестве основной палитры используется только primary, но нет secondary (акцентная палитра, см. ниже), поскольку в её качестве можно использовать любую другую, например red, blue, gray и т.д. Всё это есть в Berry CSS.

При выполнении верстки лучше использовать именно цвета primary, поскольку многие классы и переменные Berry CSS уже адаптированы к ней. Например кнопка <button class="button"> настроена на цвета primary. То же самое касается цветов теней, градаций, элементов форм и т.д. Поэтому когда верстка в палитре primary, то достаточно только соблюдать яркостную градацию, не задумываясь о том, какие это реально цвета.

Например вместо <div class="t-red500 bg-red100">текст</div>, лучше использовать <div class="t-primary500 bg-primary100">текст</div>. Таким образом цвета будут автоматически подстроены под текущий цвет палитры primary.

Цветовые палитры в Berry CSS настраиваются в виде оттенка vue и насыщенности saturation модели HSL. Поэтому, если верстка выполнена в палитре primary, то всегда можно сменить её цветовой тон.

Делается это с помощью css-переменных. Для всего сайта это можно сделать в секции :root, либо в конкретном блоке индивидуально. В этом примере явно указывается значение hue и saturation.

:root {
    --primary-hue: 123deg; // hue
    --primary-sat: 41%; // saturation
}

В этом примере можно изменить цвет primary на уже существующую палитру red:

:root {
    --primary-hue: var(--red-hue);
    --primary-sat: var(--red-sat);
}

Преимущество верстки в палитре primary в том, что для смены цвета не требуется менять html-код.

Использование акцентного оттенка

В Berry CSS возможно задание акцентного цвета в виде нескольких css-переменных. Акцентный цвет строится на основе оттенка primary с произвольным смещением:

--accent-hue-offset: -30deg;
--accent-sat-offset: 0%;
--accent-hue: calc(var(--primary-hue) + var(--accent-hue-offset));
--accent-sat: calc(var(--primary-sat) + var(--accent-sat-offset));

Обратите внимание, что у accent нет собственных классов, поэтому он предназначен только для использования в определении цвета через hsl(). Например:

--var-background-color: hsl(var(--accent-hue) var(--accent-sat) 40%);
--var-text-color: hsl(var(--accent-hue) var(--accent-sat) 90%);

Использование смещений позволяет создавать динамические цвета, которые будут сами подстраиваться под primary-палитру.