Можно ли переопределить по умолчанию цвета CSS?

Вдохновленный ЦВЕТЫ: ​​более приятная цветовая палитра для Интернета, мне было интересно, есть ли способ переопределить стандартное определение цвета по умолчанию, как определенные в спецификация HTML/CSS с этими новыми цветами.

Я знаю, что я могу создавать пользовательские правила CSS (и LESS) для определения новых цветов и применять их к которым всегда будут элементы, однако интерес здесь, например,

h1{
    /* #ff0000 is current definition of red, I want to redefine it to #FF4136 */
    color: red;
}

Обновление

Я был так воодушевлен своим вопросом, я оказался в исходном коде Blink и WebKit, и из того, что я вижу, эти цвета определены в коде.

Webkit Линия ~ 3299

static const ColorValue colorValues[] = {
    { CSSValueAqua, 0xFF00FFFF },
    { CSSValueBlack, 0xFF000000 },
    { CSSValueBlue, 0xFF0000FF },
    { CSSValueFuchsia, 0xFFFF00FF },
    { CSSValueGray, 0xFF808080 },
    { CSSValueGreen, 0xFF008000  },
    { CSSValueGrey, 0xFF808080 },
    { CSSValueLime, 0xFF00FF00 },
    { CSSValueMaroon, 0xFF800000 },
    { CSSValueNavy, 0xFF000080 },
    { CSSValueOlive, 0xFF808000  },
    { CSSValueOrange, 0xFFFFA500 },
    { CSSValuePurple, 0xFF800080 },
    { CSSValueRed, 0xFFFF0000 },
    { CSSValueSilver, 0xFFC0C0C0 },
    { CSSValueTeal, 0xFF008080  },
    { CSSValueTransparent, 0x00000000 },
    { CSSValueWhite, 0xFFFFFFFF },
    { CSSValueYellow, 0xFFFFFF00 },
    { CSSValueInvalid, CSSValueInvalid }
};

Мигает ~ Линия 157

Обновление 2

В будущем может быть какая-то надежда. FireFox Nightly build включает концепцию CSS-variable. Хотя конкретный поставщик на данный момент, он "почти" связан с моим вопросом. Связанная спецификация W3C: Пользовательские свойства CSS для каскадных переменных Уровень модуля 1 - см. Пример 4

Ответы

Ответ 1

Нет, эти ключевые слова цвета предварительно определены и нет возможности переопределить их сопоставления цветов извне браузера. Это относится ко всем именованным ключевым словам цвета, указанным в спецификации, на которую вы ссылаетесь, включая базовый набор ключевых слов CSS, ключевые слова X11/SVG и устаревшие системные цвета (хотя, конечно, системные цвета взяты из палитры системы).

Вы не сможете запросить вычисленные стили элементов DOM и заменить их на лету либо потому, что вычисленные значения цвета всегда rgb() или rgba() триплеты, даже если каскадное значение является ключевым словом. Это указано в спецификации, с которой вы ссылаетесь:

  • Вычисленное значение для базовых ключевых слов цвета, шестнадцатеричных значений RGB и расширенных ключевых слов цвета является эквивалентным триплетом числовых значений RGB, например. шестизначное шестнадцатеричное значение или функциональное значение rgb (...) с альфа-значением 1.

В вашем примере правила CSS вычисленный color элементов h1 будет rgb(255, 0, 0), а не red. Вы не можете отличить #ff0000 или red от rgb(255, 0, 0) в этом случае, что может создавать проблемы, если вы специально ориентируетесь только на ключевое слово red.

Вы можете анализировать и изменять таблицу стилей непосредственно с помощью script, но разбор CSS нелегкий. Вы должны учитывать сокращенные объявления, URL-адреса (например, background: red url(redimg.png) center center no-repeat;) и т.д. И т.д. Возможно, это выходит за рамки вашего вопроса.

Пользовательские свойства позволяют указывать только каскадную переменную вместо ключевого слова в качестве значения. Вы не сможете изменять существующие предварительно определенные ключевые слова с помощью настраиваемых свойств, поэтому вам все равно придется заменять каждое появление red чем-то вроде var(red), где свойство var-red соответствует пользовательскому красному.