lab()
Базовая версия 2023
Новое
С мая 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, она не будет работать на старых устройствах или браузерах.
Функциональная запись lab() выражает заданный цвет в цветовом пространстве CIE L*a*b* цветовое пространство.
Lab охватывает весь диапазон цветов, видимых человеком, определяя светлоту цвета, значение по оси красный/зелёный, значение по оси синий/жёлтый и необязательное значение альфа-прозрачности.
Синтаксис
/* Absolute values */ lab(29.2345% 39.3825 20.0664); lab(52.2345% 40.1645 59.9971); lab(52.2345% 40.1645 59.9971 / .5); /* Relative values */ lab(from green l a b / 0.5) lab(from #0000FF calc(l + 10) a b) lab(from hsl(180 100% 50%) calc(l - 10) a b)
Значения
Ниже приведены описания разрешенных значений для абсолютных и относительных цветов.
Синтаксис абсолютных значений
lab(L a b[ / A])
Параметры следующие:
L-
Значение
<number>в диапазоне от0до100, значение<percentage>в диапазоне от0%до100%, или ключевое словоnone(эквивалентное0%в данном случае). Это значение определяет светлоту цвета. Здесь число0соответствует0%(чёрный), а число100соответствует100%(белый). a-
Значение
<number>в диапазоне от-125до125, значение<percentage>в диапазоне от-100%до100%, или ключевое словоnone(эквивалентное0%в данном случае). Это значение определяет расстояние цвета вдоль осиa, которая определяет, насколько цвет является зелёным (движение к-125) или красным (движение к+125). Обратите внимание, что эти значения имеют знак (допускаются как положительные, так и отрицательные значения) и теоретически не ограничены, что означает, что вы можете задать значения за пределами пределов±125(±100%) . На практике значения не могут превышать±160. b-
Значение
<number>в диапазоне от-125до125, значение<percentage>в диапазоне от-100%до100%, или ключевое словоnone(эквивалентное0%в данном случае). Это значение определяет расстояние цвета вдоль осиb, которая определяет, насколько цвет является синим (движение к-125) или жёлтым (движение к+125) . Обратите внимание, что эти значения имеют знак (допускаются как положительные, так и отрицательные значения) и теоретически не ограничены, что означает, что вы можете задать значения за пределами пределов±125(±100%) . На практике значения не могут превышать±160. -
AНеобязательно -
Значение
<alpha-value>, представляющее значение альфа-канала цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Кроме того, ключевое словоnoneможет быть использовано для явного указания отсутствия альфа-канала. Если значение каналаAне указано явно, оно по умолчанию равно 100%. Если указано, значение предваряется косой чертой (/).
Примечание: См. Пропущенные компоненты цвета для получения дополнительной информации о влиянии none.
Синтаксис относительных значений
lab(from <color> L a b[ / A])
Параметры следующие:
from <color>-
Ключевое слово
fromвсегда включается при определении относительного цвета, за которым следует значение<color>, представляющее цвет источника. Это исходный цвет, на котором основан относительный цвет. Цвет источника может быть любым допустимым синтаксисом<color>, включая другой относительный цвет. L-
Значение
<number>в диапазоне от0до100, значение<percentage>в диапазоне от0%до100%, или ключевое словоnone(эквивалентное0%в данном случае) Это значение представляет светлоту выходного цвета. Здесь число0соответствует0%(чёрный), а число100соответствует100%(белый). a-
Значение
<number>в диапазоне от-125до125, значение<percentage>в диапазоне от-100%до100%, или ключевое словоnone(эквивалентное0%в данном случае). Это значение представляет расстояние выходного цвета вдоль осиa, которая определяет, насколько цвет является зелёным (движение к-125) или красным (движение к+125) . Обратите внимание, что эти значения имеют знак (допускаются как положительные, так и отрицательные значения) и теоретически не ограничены, что означает, что вы можете задать значения за пределами пределов±125(±100%) . На практике значения не могут превышать±160. b-
Значение
<number>в диапазоне от-125до125, значение<percentage>в диапазоне от-100%до100%, или ключевое словоnone(эквивалентное0%в данном случае). Это значение представляет расстояние выходного цвета вдоль осиb, которая определяет, насколько цвет является синим (движение к-125) или жёлтым (движение к+125) . Обратите внимание, что эти значения имеют знак (допускаются как положительные, так и отрицательные значения) и теоретически не ограничены, что означает, что вы можете задать значения за пределами пределов±125(±100%) . На практике значения не могут превышать±160. -
AНеобязательно -
Значение
<alpha-value>, представляющее значение альфа-канала выходного цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Кроме того, ключевое словоnoneможет быть использовано для явного указания отсутствия альфа-канала. Если значение каналаAне указано явно, оно по умолчанию равно значению альфа-канала исходного цвета. Если указано, значение предваряется косой чертой (/).
Примечание: Обычно, когда значения процентов имеют числовой эквивалент в CSS, 100% равно числу 1. Это не всегда так для светлоты LAB и осей a и b, как упоминалось выше. В случае L, диапазон составляет от 0 до 100, а 100% равно 100. Значения a и b поддерживают как отрицательные, так и положительные значения, где 100% равно 125 и -100% равно -125.
Определение компонентов выходного канала относительного цвета
При использовании синтаксиса относительного цвета внутри функции lab(), браузер преобразует цвет источника в эквивалентный цвет Lab (если он не задан как таковой). Цвет определяется как три значения каналов цвета — l (светлота), a (ось зелёный/красный) и b (ось синий/жёлтый) — плюс значение альфа-канала (alpha). Эти значения каналов доступны внутри функции для использования при определении значений выходных каналов цвета:
- Значение канала
lразрешается в значение<number>в диапазоне от0до100, включительно. - Каналы
aиbразрешаются в каждое значение<number>в диапазоне от-125до125, включительно. - Канал
alphaразрешается в значение<number>в диапазоне от0до1, включительно.
При определении относительного цвета разные каналы выходного цвета могут быть выражены несколькими способами. Ниже мы рассмотрим несколько примеров, чтобы проиллюстрировать это.
В первых двух примерах ниже используется синтаксис относительного цвета. Однако первый пример выводит тот же цвет, что и исходный цвет, а второй — цвет, вообще не основанный на исходном цвете. Они фактически не создают относительные цвета! Вероятность их использования в реальном коде невелика, и, скорее всего, вы просто используете абсолютное значение цвета. Эти примеры включены в качестве отправной точки для обучения синтаксису относительного lab().
Начнём с исходного цвета hsl(0 100% 50%) (эквивалентного red). Следующая функция выводит тот же цвет, что и исходный цвет — она использует значения каналов l, a, и b исходного цвета (54.29, 80.8198, и 69.8997) как значения выходных каналов:
lab(from hsl(0 100% 50%) l a b)
Цвет вывода этой функции — lab(54.29 80.8198 69.8997).
Следующая функция использует абсолютные значения для значений каналов выходного цвета, выводя совершенно другой цвет, не основанный на исходном цвете:
lab(from hsl(0 100% 50%) 29.692% 44.89% -29.034%)
В этом случае выходной цвет — lab(29.692 56.1125 -36.2925).
Следующая функция создаёт относительный цвет, основанный на исходном цвете:
lab(from hsl(0 100% 50%) l -100 b)
В этом примере:
- Цвет
hsl()источника преобразуется в эквивалентный цветlab()—lab(54.29 80.8198 69.8997). - Значения каналов
lиbвыходного цвета устанавливаются на значения каналовlab()иLэквивалента исходного цвета — эти значения составляют54.29и69.8997соответственно. - Значение канала
aвыходного цвета устанавливается на новое значение, не основанное на исходном цвете:-100.
Конечный выходной цвет — lab(54.29 -100 69.8997).
Примечание: Как упоминалось выше, если цвет вывода использует другую модель цветового пространства, чем исходный цвет, исходный цвет преобразуется в ту же модель, что и цвет вывода, в фоне, чтобы он мог быть представлен совместимым способом (т. е. с использованием тех же каналов).
В примерах, которые мы рассмотрели в этом разделе, альфа-каналы исходного и выходного цветов не были явно указаны. Если альфа-канал выходного цвета не указан, он по умолчанию принимает значение альфа-канала исходного цвета. Если альфа-канал исходного цвета не указан (и он не является относительным цветом), он по умолчанию принимает значение 1. Следовательно, значения альфа-каналов исходного и выходного цвета равны 1 в приведенных выше примерах.
Давайте рассмотрим примеры, в которых указаны значения альфа-каналов исходного и выходного цветов. В первом примере значение альфа-канала вывода равно значению альфа-канала исходного цвета, а во втором — различному значению, не связанному со значением альфа-канала исходного цвета.
lab(from hsl(0 100% 50% / 0.8) l a b / alpha) /* Computed output color: lab(54.29 80.8198 69.8997 / 0.8) */ lab(from hsl(0 100% 50% / 0.8) l a b / 0.5) /* Computed output color: lab(54.29 80.8198 69.8997 / 0.5) */
В следующем примере hsl() исходный цвет снова преобразуется в lab() эквивалент — lab(54.29 80.8198 69.8997). Вычисления calc() применяются к значениям L, a, b, и A, что приводит к выходному цвету lab(74.29 60.8198 29.8997 / 0.9):
lab(from hsl(0 100% 50%) calc(l + 20) calc(a - 20) calc(b - 40) / calc(alpha - 0.1))
Примечание: Поскольку значения каналов исходного цвета разрешены до <number> значений, вам нужно добавлять числа к ним при использовании в вычислениях, даже в тех случаях, когда канал обычно принимает <percentage>, <angle>, или другие типы значений. Добавление <percentage> к <number>, например, не работает.
Формальный синтаксис
Примеры
Настройка светлоты
Следующий пример демонстрирует влияние изменения значения светлоты функции lab().
HTML
<div data-color="red-dark"></div> <div data-color="red"></div> <div data-color="red-light"></div> <div data-color="green-dark"></div> <div data-color="green"></div> <div data-color="green-light"></div> <div data-color="blue-dark"></div> <div data-color="blue"></div> <div data-color="blue-light"></div>
CSS
[data-color="red-dark"] {
background-color: lab(5 125 71);
}
[data-color="red"] {
background-color: lab(40 125 71);
}
[data-color="red-light"] {
background-color: lab(95 125 71);
}
[data-color="green-dark"] {
background-color: lab(10% -120 125);
}
[data-color="green"] {
background-color: lab(50% -120 125);
}
[data-color="green-light"] {
background-color: lab(90% -120 125);
}
[data-color="blue-dark"] {
background-color: lab(10 -120 -120);
}
[data-color="blue"] {
background-color: lab(50 -120 -120);
}
[data-color="blue-light"] {
background-color: lab(90 -120 -120);
}
Результат
Настройка цветовых осей
В этом примере демонстрируется эффект установки значений a и b функции lab() в крайние и средние точки оси a, которая простирается от зеленого (-125) до красного (125), и оси b, которая простирается от желтого (-125) до синего (125).
HTML
<div data-color="red-yellow"></div> <div data-color="red-zero"></div> <div data-color="red-blue"></div> <div data-color="zero-yellow"></div> <div data-color="zero-zero"></div> <div data-color="zero-blue"></div> <div data-color="green-yellow"></div> <div data-color="green-zero"></div> <div data-color="green-blue"></div>
CSS
Используя свойство CSS background-color, мы меняем значения a и b функции цвета lab() вдоль осей a и b, показывая эффект максимальных, средних и минимальных значений в каждом случае.
/* a-axis max, variable b-axis */
[data-color="red-yellow"] {
background-color: lab(50 125 125);
}
[data-color="red-zero"] {
background-color: lab(50 125 0);
}
[data-color="red-blue"] {
background-color: lab(50 125 -125);
}
/* a-axis center, variable b-axis */
[data-color="zero-yellow"] {
background-color: lab(50 0 125);
}
[data-color="zero-zero"] {
background-color: lab(50 0 0);
}
[data-color="zero-blue"] {
background-color: lab(50 0 -125);
}
/* a-axis min, variable b-axis */
[data-color="green-yellow"] {
background-color: lab(50 -125 125);
}
[data-color="green-zero"] {
background-color: lab(50 -125 0);
}
[data-color="green-blue"] {
background-color: lab(50 -125 -125);
}
Результат
Левый столбец находится в желтой области (-125) оси b, а правый — в синей (125). Верхняя строка отображает цвета в красной области оси a (-125), а нижняя — в зеленой (125). Средний столбец и строка находятся в середине (0) каждой оси, при этом средняя ячейка является серой; она не содержит красного, зеленого, желтого или синего, с 0 значением для обеих осей.
Линейные градиенты вдоль оси a и оси b
В этом примере используются линейные градиенты для демонстрации прогрессии значений функции lab() вдоль оси a (от красного к зеленому) и вдоль оси b (от желтого к синему). На каждом изображении градиента одна ось остается статичной, а другая ось меняется от низкого до высокого значения оси.
CSS
/* a-axis gradients */
[data-color="red-to-green-yellow"] {
background-image: linear-gradient(to right, lab(50 125 125), lab(50 -125 125));
}
[data-color="red-to-green-zero"] {
background-image: linear-gradient(to right, lab(50 125 0), lab(50 -125 0));
}
[data-color="red-to-green-blue"] {
background-image: linear-gradient(to right, lab(50 125 -125), lab(50 -125 -125));
}
/* b-axis gradients */
[data-color="yellow-to-blue-red"] {
background-image: linear-gradient(to right, lab(50 125 125), lab(50 125 -125));
}
[data-color="yellow-to-blue-zero"] {
background-image: linear-gradient(to right, lab(50 0 125), lab(50 0 -125));
}
[data-color="yellow-to-blue-green"] {
background-image: linear-gradient(to right, lab(50 -125 125),lab(50 -125 -125));
}
Результат
Настройка непрозрачности
Следующий пример показывает эффект изменения значения A (альфа) функционального обозначения lab(). Элементы red и red-alpha перекрывают элемент #background-div для демонстрации эффекта непрозрачности. Присвоение A значения 0.4 делает цвет 40% непрозрачным.
HTML
<div id="background-div"> <div data-color="red"></div> <div data-color="red-alpha"></div> </div>
CSS
[data-color="red"] {
background-color: lab(80 125 125);
}
[data-color="red-alpha"] {
background-color: lab(80 125 125 / 0.4);
}
Результат
Использование относительных цветов с lab()
В этом примере стилизуются три <div> элемента с разными цветами фона. Средний элемент получает исходный --base-color, а левый и правый — осветленные и затемненные варианты этого --base-color.
Эти варианты определяются с помощью относительных цветов — --base-color пользовательское свойство передается в функцию lab(), и выходные цвета изменяют свой канал светлоты для достижения желаемого эффекта с помощью функции calc() . Осветленный цвет имеет 15% добавленных к каналу светлоты, а затемнённый — 15% вычтенных.
CSS
:root {
--base-color: orange;
/* equivalent of lab(75 24 79) */
}
#one {
background-color: lab(from var(--base-color) calc(l + 15) a b);
}
#two {
background-color: var(--base-color);
}
#three {
background-color: lab(from var(--base-color) calc(l - 15) a b);
}
Результат
Вывод следующий:
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
lab |
111 | 111 | 113 | 97 | 15 | 111 | 113 | 75 | 15 | 22.0 | 111 |
mixed_type_parameters |
116 | 116 | 113 | 102 | 16.2 | 116 | 113 | 78 | 16.2 | 24.0 | 116 |
relative_syntax |
119 | 119 | 128 | 105 | 16.4 | 119 | 128 | 79 | 16.4 | 25.0 | 119 |
См. также
-
<color>тип данных -
<color-function>тип данных - Использование относительных цветов
- Модуль CSS colors
- LCH цвета в CSS: что, почему и как? от Ли Веру (2020)
-
Заметки о выпуске Safari Technology Preview 122: включает
lab()иlch()цвета
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lab