在CSS中,HSL值可以是浮点数吗?

7

CSS3规范仅指定:

函数表示法中HSLA颜色值的格式为“hsla(”后跟以度为单位的色相、饱和度和亮度作为百分比,后跟“,”和“)”。

所以我理解这些值将被解释为浮点数而不是整数?例如:

hsla(200.2,90.5%,10.2%,.2)

这将大大扩展由HSL覆盖的颜色范围,这个范围相对于RGB来说本来就很小。

它在Chrome中似乎可以正常显示,但我不知道它们是否只将其解析为INT值或其他方式。


不同的浏览器有不同的处理方式。试着做一个例子。 - Blender
3个回答

5

HSL值在交付给系统之前会被转换为十六进制RGB值。设备需要将任何超出“设备色域”(可显示的颜色范围)的RGB值剪裁为可显示的值。RGB值用十六进制表示。这是浏览器将HSL值转换为RGB值的指定算法。标准没有指定四舍五入行为 - 由于C或C++中似乎没有内置的四舍五入函数,因此有多种四舍五入方式。

HOW TO RETURN hsl.to.rgb(h, s, l): 
       SELECT: 
      l<=0.5: PUT l*(s+1) IN m2
      ELSE: PUT l+s-l*s IN m2
       PUT l*2-m2 IN m1
       PUT hue.to.rgb(m1, m2, h+1/3) IN r
       PUT hue.to.rgb(m1, m2, h    ) IN g
       PUT hue.to.rgb(m1, m2, h-1/3) IN b
       RETURN (r, g, b)

推荐建议中得知:

换句话说,你应该能够使用HSLA的小数值来表示与RGB相同范围的颜色。


如果没有明确的颜色配置文件,所有设备是否都将RGB值范围(例如0255)映射到可能的LCD或电子枪输出级别的完整范围(例如完全不透明或关闭到完全透明或打开),在显示RGB工厂平衡和伽马校正之后(影响范围中间而非端点)?由于CSS hsl()rgb()颜色没有颜色配置文件,这是否意味着颜色永远不会超出“设备色域”,而是以设备色域本身的范围显示颜色? - Slipp D. Thompson

1
据我所知,每个浏览器都将它们转换为整数。也许吧。如果我错了,你也无法分辨出差异。如果真的很重要,为什么不去截屏并在Photoshop中打开它们或使用屏幕颜色计?没有人会在没有测试的情况下给出明确的答案,而测试只需要2分钟...所以...

我对规范感兴趣,而不是针对每个浏览器的执行。 - Michael Heilemann
16
那你就应该五年前就这么说。 - user578895

-1

我不确定,但是只要输入一些浮点数并查看是否有效,这是有道理的吧?尝试使用小数和不使用小数只需要两秒钟。


如果我只是在建立一个网页,那当然可以。但这个问题被问出来是因为我正在设计和构建一个系统,该系统必须尝试按照正确的路线存储和处理这些值。 - Michael Heilemann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接