Less.js: 不透明的十六进制颜色缠结在一起

创建于 2018-07-17  ·  14评论  ·  资料来源: less/less.js

更新到[email protected]之后颜色不透明度渲染为

背景色:#55555599; --> #55555599 99; (无效)
背景色:#5559; --> #5559 9; (无效)

bug medium priority

最有用的评论

我更新了color()函数以识别#RRGGBBAA并进行了一些更新以将颜色保持在相同的色彩空间中。 过去,为了浏览器兼容性,所有内容都转换为简单的十六进制(如果 alpha = 1)或rgba() 。 现在,我们可以通过保留所使用的颜色值来保持更一致。 十六进制颜色和关键字已经按原样输出,但是使用我的 PR,Less 将按原样输出hsl()hsla() (钳位值时除外),甚至保留颜色后的颜色空间操作如darken()spin()

所有14条评论

Less 以前甚至支持十六进制 rgba 表示法吗?

@rjgotten不是直接的,不是。 但它应该只是跳过(保留)无法识别的值。 这大概就是回归。

@rjgotten @tapsaman我不认为这是一种回归,因为它还没有得到支持。 然而,它只是一些正则表达式更改和颜色节点的更改以支持这种形式。 请参阅PR 中

这样做的一件事是删除“无效”颜色以备将来兼容。 直到您尝试在颜色操作中使用“无效”颜色时,它才会在评估时抛出错误。 但是 3.0+ 中的 Less 对属性中的值更加宽容,因此删除这似乎是合理的。

一件事:对于不兼容的浏览器,Less 应该转换#RRGGBBAA吗? 截至今天,IE/Edge 尚不支持,其他一些浏览器也不支持。 微软没有给出任何迹象表明他们将很快实施。 但是,我之所以实现它,是因为颜色解析函数中的解析肯定存在问题。 它抓取整个字符串并保存颜色,但如果颜色为 4 或 8 个字符,则不会推进解析器,这就是它重复最后一位数字的原因。

编辑:我所做的是允许作者通过rgba(#55555599)转换为rgba()格式。

以下是我对此的一些想法列表。

  • 我不确定意识到浏览器支持是否是 Less 的工作。
  • 将 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()需要在内部返回一个颜色。 所以如果你想真正使用 Less 的颜色函数,像rgba() _have_ 这样的函数是 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 顺序专门用于 Internet Explorer 中的旧版 DirectShow 过滤器。
CSS 中的 8 位或 4 位十六进制语法是 afaik RGBA 顺序。

支持两者也使得直接无法知道文字#000000FF代表完全透明的蓝色 (ARGB) 还是完全不透明的黑色 (RGBA)。

我的建议:放弃 ARGB 颜色支持。 您只需要在长期停止使用的石器时代 IE 浏览器中使用它。

我的建议:放弃 ARGB 颜色支持。 您只需要在长期停止使用的石器时代 IE 浏览器中使用它。

我们不会测试对 IE11 以下的任何支持,所以这是一个好主意。

@rjgotten是否还有其他候选函数(或特性)需要弃用? 我仍然很困惑为什么有人需要在 Less 中将颜色写为 _string_ ,然后使用color()函数将其转换为颜色。 好像是 4 年前添加的。

我仍然很困惑,为什么有人需要在 Less 中将颜色写为字符串,然后使用 color() 函数将其转换为颜色。

我唯一能想象的是自动提取场景。
例如,一个复杂的插件,它内省 SVG 背景图像并从中提取颜色定义以匹配其他规则中的颜色使用,或类似的东西。

我认为这是一个非常深刻的边缘案例。

@rjgotten不幸的是,我在解释它来自何处的问题中找不到任何历史记录。

我更新了color()函数以识别#RRGGBBAA并进行了一些更新以将颜色保持在相同的色彩空间中。 过去,为了浏览器兼容性,所有内容都转换为简单的十六进制(如果 alpha = 1)或rgba() 。 现在,我们可以通过保留所使用的颜色值来保持更一致。 十六进制颜色和关键字已经按原样输出,但是使用我的 PR,Less 将按原样输出hsl()hsla() (钳位值时除外),甚至保留颜色后的颜色空间操作如darken()spin()

赶上,我在船上。 我认为argb()函数可以满足对旧格式的任何需求。 这是一个很好的举措。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

awebdev picture awebdev  ·  4评论

pknepper picture pknepper  ·  3评论

BrianMulhall picture BrianMulhall  ·  4评论

xblakestone picture xblakestone  ·  3评论

chricken picture chricken  ·  6评论