Почему шестнадцатеричные числа имеют префикс # вместо 0x? - PullRequest
1 голос
/ 10 апреля 2020

Поскольку любое значение RGB является просто 24-разрядным целым числом, имеет смысл express цвет как одно шестнадцатеричное число. Поскольку согласованный префикс для шестнадцатеричных чисел равен 0x, почему вместо этого мы ввели новый префикс (#) для цветов?

1 Ответ

1 голос
/ 02 мая 2020

Насколько я знаю, шестнадцатеричная запись взята из X11 (X Window System), которая датируется 1987 годом, до того, как существовали Linux и WWW even.

Вот соответствующая страница из руководства Xlib:

enter image description here


Причина, по которой он был в конечном итоге выбран, вероятнее всего потому, что ОС на основе Unix были выбранной ОС в то время в академических кругах, и они были знакомы с этой нотацией и думали об использовании чего-то уже поддерживаемого, а не об изобретении колеса.

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

"Mosai c имеет возможность изменить цвет фона страницы в настройках. Я спросил NCSA, возможно ли для их программы прочитайте тег «цвет страницы», а затем установите цвет страницы соответствующим образом. Они сказали мне, что это изменит спецификации HTML и только тогда они его поддержат ».
Брэдфорд Богонус (22 сентября 1994 г.)

Конечно, вся идея HTML заключалась в том, чтобы разделить структуру и представление, чтобы этого не произошло. Идея таблиц стилей появилась вскоре перед выпуском HTML 2.0 (в 1995 году).

Было множество предложений для таблиц стилей, одно раннее предложение действительно использовало 0x hex запись:

Rob Raisch (raisch@ora.com)
Thu, 10 Jun 1993 15:23:20 -0400
...
(fo) foreground= COLOR DEFAULT:''
Describes the recommended foreground color representation
for a character. Colors are specified as 'inherit', text
names, (eg. black, white, magenta), or as RGB color
values in hexidecimal, (eg. 0x000000, 0xffffff, 0xff00ff)

(ba) background= COLOR DEFAULT:''
Describes the recommended background color representation
for a character. Colors are specified as 'inherit', text
names, (eg. black, white, magenta), or as RGB color
values in hexidecimal, (eg. 0x000000, 0xffffff, 0xff00ff)
...

Другое предложение, известное как «Таблицы стилей для HTML» (Джо Энгли sh, 1994), предлагает следующее:

Все используемые цвета таблицей стилей должен быть объявлен в (необязательном) элементе COLORS . Этот элемент содержит один или несколько элементов COLOR , каждый из которых указывает один цвет.

COLOR элементы имеют два обязательных атрибута: ID , уникальный идентификатор и RGB , который определяет цвет. На цвета указывается идентификатор.

Цвета определяются их красными, зелеными и синими компонентами с использованием шестнадцатеричной записи X11 : знак фунта, за которым следуют 3, 6, 9 или 12 шестнадцатеричных цифр , Цифры интерпретируются как три группы по 1, 2, 3 или 4 полубайта, первая из которых обозначает красный компонент, вторая - зеленый, а третья - синий. Шестнадцатеричные цифры от A до F могут быть в верхнем или нижнем регистре.

<colors>
<color id=red rgb="#F00">
<color id=green rgb="#00FF00">
<color id=blue rgb="#000000000FFFFF">
<color id=grey rgb="#c0c0c0">
<color id=white rgb="#FFFFFF">
</colors>

Хотя это и не относится непосредственно к Джо Энгли sh, в конечном итоге шестнадцатеричные обозначения #RGB и #RRGGBB оказались в Черновики CSS1 и окончательная рекомендация, которую вы можете увидеть здесь: https://www.w3.org/Style/CSS/history.html.

И лично я думаю, что это, вероятно, связано с лексическим анализом, используемым для разбора текста с указанием c правил (#RGB vs #RRGGBB) вместо представления необработанных данных, как в исходном коде C / C ++. В черновиках CSS spe c он определяет правила, необходимые для разбора "hexcolor":

h               [0-9a-fA-F]
hexcolor        #{h}{h}{h}|#{h}{h}{h}{h}{h}{h}|#{h}{h}{h}{h}{h}{h}{h}{h}{h}

Поэтому в основном им требовалось текстовое определение для представления цветовых кодов и уже существующая спецификация X11 отвечать всем требованиям. Поскольку шестнадцатеричные нотации, такие как 0xCAFE, $CAFE или CAFEh, используются для представления необъявленных необработанных данных, это могло привести к путанице в отношении введения более строгих правил для уже существующих нотаций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...