Это связано с цветовыми кодами CSS:
Для шестнадцатеричного кода мы можем представить 16 777 216 цветов от # 000000 до #FFFFFF
Согласно спецификациям W3C, допустимые процентные значения RGB соответствуют диапазону от (0,0% до 100,0%) По сути, дает вам 1 003 003 001 цветовую комбинацию. (1001 ^ 3)
Согласно спецификациям:
Значения за пределами гаммы устройства должны быть обрезаны или отображены в гамме, когда гамма известна: красный, зеленый и синий значения должны быть изменено, чтобы попасть в диапазон, поддерживаемый устройством . Пользовательские агенты могут выполнять более качественное отображение цветов из одной гаммы в другую. Для типичного ЭЛТ-монитора, гамма устройства которого такая же, как у sRGB, четыре правила ниже эквивалентны:
Я сомневаюсь, что браузеры действительно могут отображать все эти значения.(но если они это сделают, скажите мне и проигнорируйте остальную часть этого поста)
Я предполагаю, что есть какое-то отображение от rgb (процент) до шестнадцатеричного. (но опять же я не совсем уверен, как это работает)
В идеале я бы хотел найти функцию rgb (процент) -> HEX
Если бы мне пришлось угадывать, это, вероятно, была бы одна из этих 3.
] 1) Округлить до ближайшего HEX
2) CEIL до ближайшего HEX
3) FLOOR до ближайшего HEX
Проблема в том, что мне нужно быть точным при отображении, и я не знаю, где искать. Мои глаза не могут различать цвета на этом уровне, но, возможно, есть какой-нибудь умный способ проверить каждый из этих 3.
Это также может зависеть от браузера. Можно ли это протестировать?
РЕДАКТИРОВАТЬ:
Firefox seems to round from empirical testing.
РЕДАКТИРОВАТЬ:
Я просматриваю исходный код Firefox прямо сейчас,
nsColor.h
// A color is a 32 bit unsigned integer with four components: R, G, B
// and A.
typedef PRUint32 nscolor;
Кажется, в Fiefox есть место только для 255 значений для каждого R, G и B. Подсказка это округление может быть ответом, но, возможно, что-то делается с альфа-каналом.