София Валитова, CSS-инженер
#5181b8 lch(52.4% 35. 263) #6186b5 hsl(205, 47%, 49%) #5381b8 lch(54% 29 263) #5081b9 #5282b8 rgb(83, 148, 184) #5084b8 hsl(218, 63%, 59%) #5383b8
Одинаковые, но разные 😭 😭 😭
Хорошо - это как?
:root {
--accent: #5181b8
--text: #000000
--light: #a1c1d8
--dark: #012168
}
- ограниченный набор цветов интерфейса
цвета из кода
цвета из палитры
#
ff
ff
ff
#ffffff
#ffffffff
#fff
#ffff
6 символов:
#
ff
ff
ff
16*16* 16*16* 16*16
16777216 оттенков
3 символа:
#
f
f
f
16* 16* 16
4096 оттенков
rgb(
123,
234,
110)
rgb(
123,
234,
110,
0.7)
rgb(
123
234
110)
rgb(
123
234
110 /
0.7)
Новый синтаксис –
color: rgb (
R
G
B
/ A );
color: rgb (
R
G
B );
Средний синтаксис –
color: rgb (
R,
G,
B );
color: rgb (
R,
G,
B,
A );
Старый синтаксис –
color: rgb (
R,
G,
B );
color: rgba (
R,
G,
B,
A );
Сложно настраивать руками
color: black;
background-color: white;
Тон цвета, представленный в виде угла цветового круга.
Насыщенность цвета
«Светлота» цвета
Новый синтаксис –
color: hsl (
H
S
L
/ A );
color: hsl (
H
S
L );
Средний синтакис –
color: hsl (
H,
S,
L );
color: hsl (
H,
S,
L,
A );
Старый синтакис –
color: hsl (
H
S
L );
color: hsla (
H,
S,
L,
A );
Просто настраивать руками
цвета из кода
цвета из палитры
Нужно как-то соотнести. Желательно автоматически.
Расстояние между двумя точками в пространстве:
3
rgb(100, 100, 100) rgb(200, 100, 100) r = 100
rgb(100, 100, 100) rgb(100, 200, 100) r = 100
rgb(100, 100, 100) rgb(100, 100, 200) r = 100
Одинаковое расстояние - разное визуальное изменение.
Система, равномерная для человеческого глаза
CIE-яркость
Может быть больше 100%!
От синего до желтого
От красного до зеленого
3
import { colord, extend } from "colord";
import labPlugin from "colord/plugins/lab";
extend([labPlugin]);
const result = colord('#5181b8').toLab();
// => { l: 73.13, a: 24.49,b: 63.71, alpha: 1 }
const lab1 = { l: 22.56, a: 34.74, b: 62.97, alpha: 1 };
const lab2 = { l: 52.37, a: -4.25, b: -34.48, alpha: 1 };
const D = Math.sqrt(
(lab1.l - lab2.l)^2 +
(lab1.a - lab2.a)^2 +
(lab1.b - lab2.b)^2 +
(lab1.alpha - lab2.alpha)^2
);
colors.forEach((color) => {
const result = palette.reduce((acc, paletteColor) => {
const d = distance(color, paletteColor);
if(d < acc.d) { /* заменяем */ }
return acc;
}, {name: null, d: Infinity } )
}
root.walkDecls(declaration => {
/* определяем, что это цвет */
/* подбираем нужный из палитры */
declaration.value = newRightColor;
});
postcss style.css --replace
Хорошо - это как?
Маленький текст о том, что это за блог
Довольно длинный текст поста, тут можно поговорить о котиках, о мягких котячьих лапках, о котиьх ушках, о том, как котики мурлыкают и делают ке-ке-ке.
Длинный текст еще одного поста, теперь можно поговорить о коржиках! Коржики пожожи на булки.
--text_primary + --bg_main
--text_primary + --accent-cover-secondary
--text_primary + --accent-cover-secondary
--text_primary: hsl(123, 0%, 2%) + --bg_main: hsl(123, 0%, 100%)
--text_primary: hsl(123, 0%, 2%) + --accent-cover-secondary: hsl(123, 60%, 90%)
--text_primary: hsl(123, 0%, 2%) + --accent-cover-secondary: hsl(123, 60%, 90%)
Маленький текст о том, что это за блог
Довольно длинный текст поста, тут можно поговорить о котиках, о мягких котячьих лапках, о котиьх ушках, о том, как котики мурлыкают и делают ке-ке-ке.
Длинный текст еще одного поста, теперь можно поговорить о коржиках! Коржики пожожи на булки.
Хорошо – это как?
Маленький текст о том, что это за блог
Довольно длинный текст поста, тут можно поговорить о котиках, о мягких котячьих лапках, о котиьх ушках, о том, как котики мурлыкают и делают ке-ке-ке.
Длинный текст еще одного поста, теперь можно поговорить о коржиках! Коржики пожожи на булки.
Это значит, что в HSL мы будем оперировать светловой.
hsl(123, 50%, 80%) - светлый цвет
hsl(123, 50%, 20%) - темный цвет
[light] {
--l-100: 100%;
--l-30: 30%;
--l-98: 98%;
--l-2: 2%;
--l-60: 60%;
--l-90: 90%;
}
[dark] {
--l-100: 0%;
--l-30: 70%;
--l-98: 2%;
--l-2: 98%;
--l-60: 40%;
--l-90: 10%;
}
Маленький текст о том, что это за блог
Довольно длинный текст поста, тут можно поговорить о котиках, о мягких котячьих лапках, о котиьх ушках, о том, как котики мурлыкают и делают ке-ке-ке.
Длинный текст еще одного поста, теперь можно поговорить о коржиках! Коржики пожожи на булки.
1. Светлота не имеет ничего общего с визуальной яркостью.
2. Цветовой угол не однородный.
CIE LAB в полярных координатах
Угол цветового круга (другого!)
Количество цвета
CIE яркость
Маленький текст о том, что это за блог
Довольно длинный текст поста, тут можно поговорить о котиках, о мягких котячьих лапках, о котиьх ушках, о том, как котики мурлыкают и делают ке-ке-ке.
Длинный текст еще одного поста, теперь можно поговорить о коржиках! Коржики пожожи на булки.
--text_primary: lch(2% 50 123) + --bg_main: lch(100% 0 123)
--text_primary: lch(2% 0 123) + --accent-cover-secondary: lch(90% 50 123)
--text_primary: lch(2% 0 123) + --accent-cover-secondary: lch(90% 50 123)
Маленький текст о том, что это за блог
Довольно длинный текст поста, тут можно поговорить о котиках, о мягких котячьих лапках, о котиьх ушках.
Длинный текст еще одного поста, теперь можно поговорить о коржиках! Коржики пожожи на булки.
Маленький текст о том, что это за блог
Маленький текст поста.
Маленький текст поста.
Маленький текст о том, что это за блог
Маленький текст поста.
Маленький текст поста.
- множество цветов, которое может отобразить монитор.
rgb()
hsl()
hex
color( sRGB
1
1
1
);
color()
- разные пространстваcolor()
- разные пространстваcolor()
- разные пространстваИдеально для ярких единичных акцентов для пользователей маков.
p {
color: #00c2c9;
}
@supports (color: lch(0% 0 0)) {
p {
color: lch(70% 50 200);
}
}
Хорошо - это как?
Хорошо - это как?
:root {
--button_bg: hsl(200 50% 50%)
--button_bg_hover: hsl(200 50% 60%)
--button_bg_active: hsl(200 50% 40%)
}
:root {
--common_l: 50%;
--hover_l: calc(var(--common_l) + 10%);
--active_l: calc(var(--common_l) - 10%);
--button_bg: hsl(200 50% var(--common_l));
--button_bg_hover: hsl(200 50% var(--hover_l));
--button_bg_active: hsl(200 50% var(--active_l));
}
:root {
--common_l: 50%;
--hover_l_diff: 10%; --active_l_diff: -10%;
--button_bg: hsl(200 50% var(--common_l));
--button_bg_hover:
hsl(200 50% calc(var(--common_l) + var(--hover_l_diff)));
--button_bg_active:
hsl(200 50% calc(var(--common_l) + var(--active_l_diff)));
}
:root {
--button_bg: hsl(200 50% 50%);
--button_bg_hover:
hsl(from var(--button_bg) h s calc(l + 10%));
--button_bg_active:
hsl(from var(--button_bg) h s calc(l - 10%));
}
hsl(from red h s l);
-> hsl(from red calc(h + 100) s l);
-> hsl(from red h calc(s - 50%) l);
-> hsl(from red h s calc(l + 20%));
Можно полифиллить, но не в рантайме.
:root {
--common_l: 50%;
--hover_l_diff: 10%; --active_l_diff: -10%;
--button_bg: hsl(200 50% var(--common_l));
--button_bg_hover:
hsl(200 50% calc(var(--common_l) + var(--hover_l_diff)));
--button_bg_active:
hsl(200 50% calc(var(--common_l) + var(--active_l_diff)));
}
В этой презентации много примеров цвета.
<div class="color" style="--c: #fff"> #fff </div>
.color {
background-color: var(--c);
height: 1em;
min-width: 1em;
...
}
.color {
background-color: var(--c);
color: color-contrast(var(--c) vs #fff, #000);
height: 1em;
min-width: 1em;
...
}
color-contrast()
color-contrast()
lch(var(--l) 30 0)
Оставить отзыв:
Презентация:
Презентация сделана с помощью Shower.