Less.js: Шестнадцатеричные цвета с непрозрачностью путаются

Созданный на 17 июл. 2018  ·  14Комментарии  ·  Источник: less/less.js

Обновлено до [email protected], после чего непрозрачность цветов с рендерингом как

цвет фона: # 55555599; -> # 55555599 99; (недействительно)
цвет фона: # 5559; -> # 5559 9; (недействительно)

bug medium priority

Самый полезный комментарий

Я обновил функцию color() чтобы распознавать #RRGGBBAA а также сделал некоторые обновления, чтобы цвета оставались в одном цветовом пространстве. Раньше все преобразовывалось либо в простой шестнадцатеричный формат (если альфа = 1), либо в rgba() для совместимости с браузером. Теперь мы можем сделать Less более последовательным, сохранив значения цвета в том виде, в котором они используются. Шестнадцатеричные цвета и ключевые слова уже выводились как есть, но с моим PR, Less будет выводить hsl() и hsla() как есть (кроме случаев ограничения значений) и даже сохранять цветовое пространство после цвета такие операции, как darken() или spin() .

Все 14 Комментарий

Поддерживал ли Less даже шестнадцатеричную нотацию rgba раньше?

@rjgotten Не прямо, нет. Но он должен просто пропускать (сохранять) нераспознанные значения. Вероятно, это регресс.

@rjgotten @tapsaman Я не думаю, что это был регресс, потому что он еще не поддерживался. Однако для поддержки этой формы потребовалось всего несколько изменений регулярного выражения и изменения цветового узла. Смотрите тесты в PR для проверки.

Одна вещь, которую он делает, - это удаляет "недопустимые" цвета для будущей совместимости. Только когда вы попытаетесь использовать «недопустимый» цвет в операции с цветом, это приведет к ошибке во время оценки. Но Less в 3.0+ более снисходителен к значениям в свойствах, поэтому это казалось разумным удалить.

Одно: следует ли Less конвертировать #RRGGBBAA для несовместимых браузеров? На сегодняшний день IE / Edge не поддерживает, как и некоторые другие браузеры. Microsoft не дала никаких указаний о том, что они будут реализованы в ближайшее время. Однако причина, по которой я реализовал это, заключается в том, что определенно была проблема с синтаксическим анализом в функции синтаксического анализа цвета. Он захватывал всю строку и сохранял цвет, но не продвигал синтаксический анализатор, если цвет был 4 или 8 символов, поэтому он повторял последние цифры.

РЕДАКТИРОВАТЬ: Я разрешил автором преобразование в формат rgba() через rgba(#55555599) .

Вот список моих мыслей по этому поводу.

  • Я не уверен, что забота Лесса о поддержке браузеров - это работа Лесса.
  • Объединение функции Less с функцией CSS «кажется» опасным, но я не могу сказать почему.
  • У нас _DO_ уже есть функция argb() предназначенная для вывода #AARRGGBB .
  • У нас также есть функция color() . Поддерживает ли он #AARRGGBB , #ARGB ?
  • color: #AA334455; и color: #A345; являются действительными (или приемлемыми) CSS, даже если не так много браузеров, которые _понимают_ эту форму.
  • Интересно, касты rbga() - скользкая дорожка. rgb() , hsl() и hsla() являются функциями CSS.
  • С другой стороны, учитывая, что Less является расширенным набором CSS, rgba() имеет большой смысл.

tl; dr: Я думаю, что мое первое впечатление состоит в том, что мы должны убедиться, что функция color() поддерживает 8- и 4-значные строки ARGB, поскольку в любом случае, похоже, это и есть цель.

Объединение функции Less с функцией CSS «кажется» опасным, но я не могу сказать почему.

Этот корабль отплыл. rgba() долгое время существовала как функция Less. Но основная причина в том, что вы можете передавать цвета чему-то вроде lighten() . То есть rgba() необходимо внутренне вернуть цвет. Таким образом, такие функции, как rgba() _have_, должны быть функциями Less, если вы действительно хотите использовать функции цвета Less. (например, lighten (rgba (50,50,50,0.5), 50%)) В противном случае это был бы просто неизвестный вызов функции. Мы должны знать, какой на самом деле цвет _, чтобы управлять указанным цветом.

Интересно, приведение rbga () - скользкая дорожка. rgb (), hsl () и hsla () также являются функциями CSS.

Да, я полагаю. Но кастинг - неправильный способ думать об этом. Он также включает эту форму: rgba(#777777, 0.5) , которая разрешена или будет разрешена в браузерах. Это не расширяет его до hsla() , это правда, но внутренняя реализация намного сложнее и также не нужна, если у вас есть метод, который работает.

У нас также есть функция color (). Поддерживает ли он #AARRGGBB, #ARGB?

Нет, спасибо, что указали на это. Я могу это добавить. Хотя я не понимаю, почему эта функция вообще существует?

Он также включает эту форму: rgba (# 777777, 0.5), которая разрешена или будет разрешена в браузерах.

Перефразируя, эта форма имеет допустимый цвет в CSS: rgba(<Color> [, opacity]) . Так что нет причин не допускать этого.

У нас _DO_ уже есть функция argb() предназначенная для вывода #AARRGGBB .

Порядок ARGB специально используется для устаревших фильтров DirectShow в Internet Explorer.
8- или 4-значный шестнадцатеричный синтаксис в CSS соответствует порядку RGBA.

Поддержка обоих также делает невозможным напрямую узнать, представляет ли буквальный #000000FF полностью прозрачный синий (ARGB) или полностью непрозрачный черный (RGBA).

Мой совет: откажитесь от поддержки цвета ARGB. Он понадобится вам только для браузеров IE каменного века, которые давно вышли из строя.

Мой совет: откажитесь от поддержки цвета ARGB. Он понадобится вам только для браузеров IE каменного века, которые давно вышли из строя.

Мы не тестируем поддержку на версиях ниже IE11, так что это хорошая идея.

@rjgotten Существуют ли другие функции-кандидаты (или возможности) для прекращения поддержки? Я все еще не понимаю, зачем кому-то когда-либо нужно было писать цвет как _string_ в Less, а затем преобразовывать его в цвет с помощью функции color() . Похоже, он был добавлен 4 года назад.

Я все еще не понимаю, зачем кому-то когда-либо нужно было записывать цвет в виде строки в Less, а затем преобразовывать его в цвет с помощью функции color ().

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

Думаю, довольно серьезный крайний случай.

@rjgotten К сожалению, я не смог найти никаких историй в проблемах, объясняющих, откуда они

Я обновил функцию color() чтобы распознавать #RRGGBBAA а также сделал некоторые обновления, чтобы цвета оставались в одном цветовом пространстве. Раньше все преобразовывалось либо в простой шестнадцатеричный формат (если альфа = 1), либо в rgba() для совместимости с браузером. Теперь мы можем сделать Less более последовательным, сохранив значения цвета в том виде, в котором они используются. Шестнадцатеричные цвета и ключевые слова уже выводились как есть, но с моим PR, Less будет выводить hsl() и hsla() как есть (кроме случаев ограничения значений) и даже сохранять цветовое пространство после цвета такие операции, как darken() или spin() .

Догоняя, я на борту. Я думаю, что функция argb() отвечает всем требованиям старого формата. Это хороший ход.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги