2013-06-21 3 views
2

В CSS мы можем использовать шестизначный шестизначный код для цветов или использовать 3-значные ярлыки.Расширение кода Hex кода CSS

Как браузер делает расчет шестизначного шестнадцатеричного кода из 3-значного ярлыка?

F F F 
/ | \ 
/ | \ 
/ | \ 
FF  FF FF 

Простая конкатенация кажется немного сырой нефть (и здесь очень грубый пример)

var shortHex = "FFF"; 
var fullHex = shortHex[0] + shortHex[0] + [...] 

ли 2 цифры часть получена из расчета на основе числового значения одной цифры?

Как вы получаете от Hex D с двоичным значением 1101, чтобы DD с двоичным значением 11011101 через расчет?

Один способ: - умножить каждую шестую цифру на 11 (шестнадцатеричный), что дает результат. Таким образом, D * 11 дает DD.

Это оставляет нам вопрос: как именно это делается в браузере? Это просто случай удвоения каждой цифры или использование другого уравнения?

Во-вторых, почему была введена эта трехзначная система? Что вдохновило это решение?

+0

Не будет ли это отличаться от браузер для браузера? В конце концов, это деталь реализации. Спектр говорит, чтобы просто удвоить каждую цифру, но не говорит, должна ли реализация делать это путем конкатенации, свертывания или умножения бит. – BoltClock

+0

Возможно, да. Мне было бы интересно увидеть, как это будет достигнуто, если не будет применен один стандартный подход. –

ответ

1

Цвета в коротких интерьерах используют browser-safe web palette, который использует тройки, которые всегда удваиваются. Сокращенный цветовой код может использоваться только со значениями, которые могут быть удвоены. Следовательно,

#fff > #ffffff 
#909 > #990099 
+0

Это кажется звук, re: дизайн решение. Все, что осталось, является источником какого-то рода, но, учитывая, что это относится к CSS1, я не уверен, что источник можно откопать. – BoltClock

1

Короткий ответ: вы не можете.

3-разрядные шестнадцатеричные коды содержат меньше байтов по сравнению с шестнадцатеричным шестнадцатеричным кодом. Это означает, что возможно меньшее разнообразие оттенков. Преобразование может происходить только в случае точного соответствия цветам. Рассмотрим пример преобразования цветов 3 цифры значений:

#000000 -> #000 
#336699 -> #369 
#123456 -> #123456 
#01aa01 -> #01aa01 
#a1a1a1 -> #a1a1a1 
#0aa11a -> #0aa11a 

Первые два были успешными, как каждой пары красного, зеленого и синего цветов имеют одинаковое значение и, следовательно, это сокращение для значения 6 цифр. Однако следующие несколько примеров не могут быть преобразованы в 3-значные значения, так как они станут разными оттенками. Все трехзначные шестнадцатеричные коды являются предопределенными веб-безопасными цветами, и все имеют соответствующие пары.

+0

Я думаю, вы неправильно поняли вопрос. Вопрос заключается в том, как 6-значные значения выводятся из трехзначных значений. – BoltClock

0

Ну, это просто. Каждый шестнадцатеричный символ соответствует 4 битам.

Как получить от Hex D с двоичным значением 1101, чтобы DD с двоичным значением 1101 1101 через расчет?

псевдокод:

color4Bit := 0xD /* D in hex */ 
color8Bit := hex<<4 | hex /* bit shifting to the left with 4 positions, then apply either binary OR, or add the original 4 bits */ 

Во-вторых, почему это 3 цифры внедренная? Что вдохновило это решение?

Это проще. Быстрее создать таблицу стилей. Редко вам нужно быть конкретным.16 оттенков каждого цвета более чем достаточно, чтобы настроить общее настроение для веб-страницы. Специфика добавляется, когда профессиональный дизайнер считает это необходимым.
Например, мне нужен серый фон. Зачем мне указывать # 808080? Это по-другому, в основном, от # 888? Или, если я хочу, чтобы он был оранжевым? Я использую # F92, из памяти, потому что этот цвет будет близок к тому, что я себе представляю. Поэтому, если я не дизайнер, но я хочу, чтобы мои веб-функции выглядели красиво, и я знаю CSS3, я могу сделать все это всего лишь с тремя шестыми позициями, градиентами, тенями и т. Д.

+1

# 808080! = # 888 –

+0

ну, да. Я знаю. Я просто сказал, что на данный момент никто не заботится, это # ​​808080 или # 818181 или # 828282 и т. Д. Возможно, это будет # 888888 или короче - # 888. Описанный выше псевдокод I говорит об этом довольно четко. – AlexanderMP