Преобразование точное
Hex — это и есть RGB. #FF5733 — буквально FF, 57, 33, прочитанные как три
шестнадцатеричных числа: 255, 87, 51. Ничего не приближается и ничего не
теряется, в обе стороны.
Это стоит знать, потому что верно не для всякой пары на сайте: HSL и CMYK округляют, а hex в RGB — нет.
Где нужны каналы
rgba(), когда нужен тот же цвет с частичной непрозрачностью — hex с альфой существует, но в старых инструментах по-прежнему неудобен.- Canvas и работа с изображениями, где пиксель — это три числа.
- Везде, где надо считать: смешивание, контраст или проверка светлоты работают с каналами, а не со строкой.
Сокращённая запись и альфа
#f53 разворачивается в #FF5533 — каждый разряд удваивается, поэтому
трёхзначная форма есть не у всякого цвета. Восьмизначный #FF573380 читается, а
альфа отбрасывается: rgb() здесь несёт три канала, не четыре.
Вопросы
Теряется ли что-нибудь?+
Нет. Hex и RGB — одни и те же числа в разных системах счисления, поэтому преобразование точное в обе стороны, в отличие от HSL и CMYK, которые округляют.
А как же #f53?+
Трёхзначная запись разворачивается удвоением каждого разряда: `#f53` это `#FF5533`. Так записываются только цвета, у которых пары совпадают.
Можно получить rgba()?+
Альфа из восьмизначного hex читается и отбрасывается, потому что остальные записи здесь её не несут. Держите непрозрачность отдельным значением.