更新到[email protected]之后颜色不透明度渲染为
背景色:#55555599; --> #55555599 99; (无效)
背景色:#5559; --> #5559 9; (无效)
Less 以前甚至支持十六进制 rgba 表示法吗?
@rjgotten不是直接的,不是。 但它应该只是跳过(保留)无法识别的值。 这大概就是回归。
@rjgotten @tapsaman我不认为这是一种回归,因为它还没有得到支持。 然而,它只是一些正则表达式更改和颜色节点的更改以支持这种形式。 请参阅PR 中
这样做的一件事是删除“无效”颜色以备将来兼容。 直到您尝试在颜色操作中使用“无效”颜色时,它才会在评估时抛出错误。 但是 3.0+ 中的 Less 对属性中的值更加宽容,因此删除这似乎是合理的。
一件事:对于不兼容的浏览器,Less 应该转换#RRGGBBAA
吗? 截至今天,IE/Edge 尚不支持,其他一些浏览器也不支持。 微软没有给出任何迹象表明他们将很快实施。 但是,我之所以实现它,是因为颜色解析函数中的解析肯定存在问题。 它抓取整个字符串并保存颜色,但如果颜色为 4 或 8 个字符,则不会推进解析器,这就是它重复最后一位数字的原因。
编辑:我所做的是允许作者通过rgba(#55555599)
转换为rgba()
格式。
以下是我对此的一些想法列表。
argb()
函数来输出#AARRGGBB
。color()
函数。 它是否支持#AARRGGBB
、 #ARGB
?color: #AA334455;
和color: #A345;
是有效的(或可接受的)CSS,即使没有多少浏览器_理解_这种形式。rbga()
铸造是否是一个滑坡。 rgb()
、 hsl()
和hsla()
也是 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()
函数可以满足对旧格式的任何需求。 这是一个很好的举措。
最有用的评论
我更新了
color()
函数以识别#RRGGBBAA
并进行了一些更新以将颜色保持在相同的色彩空间中。 过去,为了浏览器兼容性,所有内容都转换为简单的十六进制(如果 alpha = 1)或rgba()
。 现在,我们可以通过保留所使用的颜色值来保持更一致。 十六进制颜色和关键字已经按原样输出,但是使用我的 PR,Less 将按原样输出hsl()
和hsla()
(钳位值时除外),甚至保留颜色后的颜色空间操作如darken()
或spin()
。