HEX-коды цветов: как устроен #RRGGBB
HEX-код вроде #1e90ff состоит из трёх пар шестнадцатеричных цифр: сколько в цвете красного, зелёного и синего света, от 00 (нисколько) до ff (полностью, 255). Четвёртая пара задаёт прозрачность: 80 это примерно 50%, ff это полностью непрозрачный цвет.
Читать 5 мин
Как устроен HEX-код
Любой цвет на экране смешан из красного, зелёного и синего света. HEX-код записывает силу каждого из них двумя символами после знака #: сначала красный, потом зелёный, потом синий. Отсюда шаблон #RRGGBB.
Символы шестнадцатеричные, то есть счёт идёт шестнадцатью цифрами: от 0 до 9, дальше a (10), b (11), c (12), d (13), e (14) и f (15). Одна пара вмещает 256 значений, от 00 (0) до ff (255), ровно как в rgb().
Чтобы перевести пару в обычное число, умножьте первую цифру на 16 и прибавьте вторую. Ниже цвет #1e90ff, он же dodgerblue в CSS: сначала в четырёх форматах, потом разобранный по парам.
| Формат | Значение |
|---|---|
| HEX | |
| RGB | |
| HSL | |
| OKLCH |
| Пара | Канал | Расчёт | Значение |
|---|---|---|---|
| 1e | Красный | 1 × 16 + 14 | 30 |
| 90 | Зелёный | 9 × 16 + 0 | 144 |
| ff | Синий | 15 × 16 + 15 | 255 |
Получается rgb(30, 144, 255): немного красного, заметная доля зелёного и синий на максимуме, в сумме яркий небесно-голубой. Три пары по 256 значений дают 16 777 216 возможных цветов.
Короткая запись из трёх и четырёх цифр
Если обе цифры в каждой паре совпадают, пару можно написать одной цифрой. #ffcc00 превращается в #fc0, а браузер сам удвоит каждую цифру обратно. У #1e90ff короткой формы нет: 1e и 90 не состоят из одинаковых цифр.
Короткой записью можно выразить всего 4096 цветов из 16,7 миллиона. Вариант из четырёх цифр так же добавляет прозрачность: #f008 означает #ff000088.
| Коротко | Полностью | Цвет |
|---|---|---|
| #fff | #ffffff | Белый |
| #000 | #000000 | Чёрный |
| #f00 | #ff0000 | Красный |
| #fc0 | #ffcc00 | Тёплый жёлтый |
| #abc | #aabbcc | Серо-голубой |
| #f008 | #ff000088 | Красный с непрозрачностью 53% |
Прозрачность в HEX: восьмизначный код
Восьмизначный код добавляет четвёртую пару для альфа-канала, то есть непрозрачности: #RRGGBBAA. 00 означает полностью прозрачный цвет, ff полностью плотный. Все актуальные браузеры понимают такую запись в CSS, как и короткую форму #RGBA.
Чтобы получить пару, умножьте непрозрачность на 255, округлите до целого и переведите в HEX. Для 50% выходит 127,5, после округления 128, в HEX это 80. Вот полная таблица на примере #1e90ff.
| Непрозрачность | Альфа (0–255) | Пара HEX | #1e90ff с альфой |
|---|---|---|---|
| 100% | 255 | ff | #1e90ffff |
| 95% | 242 | f2 | #1e90fff2 |
| 90% | 230 | e6 | #1e90ffe6 |
| 85% | 217 | d9 | #1e90ffd9 |
| 80% | 204 | cc | #1e90ffcc |
| 75% | 191 | bf | #1e90ffbf |
| 70% | 179 | b3 | #1e90ffb3 |
| 65% | 166 | a6 | #1e90ffa6 |
| 60% | 153 | 99 | #1e90ff99 |
| 55% | 140 | 8c | #1e90ff8c |
| 50% | 128 | 80 | #1e90ff80 |
| 45% | 115 | 73 | #1e90ff73 |
| 40% | 102 | 66 | #1e90ff66 |
| 35% | 89 | 59 | #1e90ff59 |
| 30% | 77 | 4d | #1e90ff4d |
| 25% | 64 | 40 | #1e90ff40 |
| 20% | 51 | 33 | #1e90ff33 |
| 15% | 38 | 26 | #1e90ff26 |
| 10% | 26 | 1a | #1e90ff1a |
| 5% | 13 | 0d | #1e90ff0d |
| 0% | 0 | 00 | #1e90ff00 |
CSS
.overlay {
background: #00000080;
}
.overlay-same {
background: rgb(0 0 0 / 50%);
}Здесь два подвоха. Во-первых, 80 это 128 из 255, то есть 50,2%, а не ровно 50%: у альфы в HEX всего 256 ступеней, поэтому круглые проценты почти всегда приблизительны. Во-вторых, Android ставит альфу в начало. В цветовом ресурсе Android #801e90ff означает то же, что #1e90ff80 в CSS.
Как прочитать HEX-код на глаз
Угадать цвет можно без всяких конвертеров. Смотрите на первую цифру каждой пары: в ней почти вся информация.
| Имя в CSS | HEX | RGB | Как читается |
|---|---|---|---|
| tomato | #ff6347 | 255, 99, 71 | Красный на максимуме, немного зелёного и синего: тёплый светло-красный |
| gold | #ffd700 | 255, 215, 0 | Красный и зелёный высоко, синего нет: жёлтый |
| chocolate | #d2691e | 210, 105, 30 | Ведёт красный, зелёный вполовину, синий низко: оранжево-коричневый |
| darkturquoise | #00ced1 | 0, 206, 209 | Зелёный и синий высоко, красного нет: бирюзово-голубой |
| dodgerblue | #1e90ff | 30, 144, 255 | Ведёт синий, зелёный посередине: небесно-голубой |
| mediumorchid | #ba55d3 | 186, 85, 211 | Красный и синий высоко, зелёный низко: фиолетовый |
| teal | #008080 | 0, 128, 128 | Зелёный и синий вполовину: тёмный сине-зелёный |
| navy | #000080 | 0, 0, 128 | Только синий, вполовину: тёмно-синий |
| slategray | #708090 | 112, 128, 144 | Почти поровну, синий чуть впереди: голубовато-серый |
- Самая большая первая цифра показывает, какой свет главный. В #d2691e у красного d, у зелёного 6, у синего 1, значит это оранжево-коричневый.
- Два высоких канала смешиваются: красный с зелёным дают жёлтый, зелёный с синим голубой, красный с синим пурпурный или фиолетовый.
- Три одинаковые пары дают серый. #333333 тёмно-серый, #999999 светло-серый. Почти одинаковые пары, как в #708090, дают приглушённый сероватый цвет.
- Высокие цифры в целом означают светлый цвет, низкие тёмный. Если все три пары не ниже c0, цвет бледный. Если все три не выше 30, цвет очень тёмный.
- Зелёный при том же числе выглядит гораздо светлее синего. У #00ff00 светлота OKLCH 0.866, у #0000ff всего 0.452.
Почему #808080 не средний серый
#808080 стоит ровно посередине по числам: 128 из 255 в каждом канале. Но на глаз он не находится посередине между чёрным и белым. Его светлота в OKLCH равна 0.600, то есть он выглядит пройденным на 60% пути к белому.
Значения HEX уже закодированы кривой sRGB, которая похожа на восприятие, но не совпадает с ним. #808080 излучает около 21,6% света белого, а перцептивные модели ставят зрительную середину ниже: OKLCH на #636363, CIELAB на #777777.
| Серый | Что это | L в OKLCH | Контраст на белом | Контраст на чёрном |
|---|---|---|---|---|
| #808080 | Середина по числам, 128 | 0.600 | 3.95:1 | 5.32:1 |
| #777777 | Середина CIELAB, L* 50 | 0.569 | 4.48:1 | 4.69:1 |
| #767676 | Самый светлый серый с 4.5:1 на белом | 0.566 | 4.54:1 | 4.62:1 |
| #636363 | Середина OKLCH, L 0.5 | 0.500 | 6.01:1 | 3.50:1 |
Для текста это важно. Серый #808080 на белом даёт 3.95:1 и не проходит WCAG AA для основного текста. #767676 это самый светлый серый, который проходит 4.5:1, а #777777, всего на ступень светлее, уже не проходит с 4.48:1.
Заглавные или строчные, с решёткой или без
Регистр в HEX-кодах не важен. #1E90FF, #1e90ff и #1E90ff это один и тот же цвет в CSS, SVG и графических редакторах. Выберите один стиль и держитесь его везде, тогда поиск по коду найдёт все места. В CSS чаще пишут строчными.
Знак # относится к синтаксису CSS, а не к самому цвету. Figma и многие редакторы показывают код без него, а языки программирования часто записывают цвет числом с префиксом 0x. Например, во Flutter Color(0xFF1E90FF) начинается с пары альфы.
Как узнать HEX-код цвета на экране
Нужна пипетка: инструмент, который считывает цвет под курсором и показывает его код. Все варианты ниже бесплатные, большинство уже есть на компьютере.
- Chrome и Edge: откройте DevTools клавишей F12, нажмите на любой цветной квадратик в панели Styles и возьмите цвет со страницы значком пипетки.
- PickShade: у палитры на главной есть кнопка пипетки, в Chrome и Edge она берёт цвет из любого места экрана.
- Windows: установите Microsoft PowerToys и нажмите Win + Shift + C, откроется Color Picker.
- macOS: откройте «Цифровой колориметр» в папке «Утилиты». Переключите его на sRGB и выберите в меню «Вид» отображение значений в шестнадцатеричном виде.
- Figma, Photoshop и большинство редакторов: пипетка вызывается клавишей I.
- Фото или скриншот: откройте его в инструменте для изображений и нажмите на любой пиксель. Картинка никуда не загружается.
Снятое пипеткой значение может отличаться от исходного на несколько единиц: экран применяет цветовой профиль, а картинки сжимаются. Если нужен точный цвет, берите его из макета или CSS, а не со скриншота.
Вопросы и ответы
Что такое HEX-код цвета?
HEX-код это шестизначная запись вроде #1e90ff, которая описывает цвет долями красного, зелёного и синего света. Каждая пара шестнадцатеричных цифр идёт от 00 (0) до ff (255), поэтому #1e90ff это rgb(30, 144, 255).
Как добавить прозрачность к HEX-цвету?
Допишите в конец четвёртую пару: #RRGGBBAA. Умножьте непрозрачность на 255, округлите и переведите в HEX: 50% это 80, 25% это 40, 75% это bf. Например, #1e90ff80 это dodgerblue с непрозрачностью около 50%.
Как записать 50% прозрачности в HEX?
50% в HEX записывается как 80, например #00000080 для полупрозрачного чёрного. 80 это 128 из 255, то есть 50,2%: у альфы в HEX 256 ступеней, и ровно 50% попадает между 7f и 80.
Чем HEX отличается от RGB?
Цвет тот же, отличается только запись. HEX пишет красный, зелёный и синий шестнадцатеричными парами, а rgb() десятичными числами от 0 до 255, поэтому #ff6347 и rgb(255, 99, 71) это один и тот же томатно-красный.
Важен ли регистр в HEX-коде?
Нет. #FF6347, #ff6347 и #Ff6347 дают один и тот же цвет в CSS, HTML, SVG и графических редакторах. В CSS обычно пишут строчными, но подойдёт любой стиль, если соблюдать его последовательно.
Какой HEX-код у среднего серого?
#808080 это середина по числам, но выглядит он светлее середины: его светлота в OKLCH 0.600. Серый, который на глаз находится ровно между чёрным и белым, лежит между #636363 (L 0.5 в OKLCH) и #777777 (L* 50 в CIELAB).