2013-06-12 29 views
6

ReSharper的告诉我:“需要备用颜色”,并补充(当我默许),第一色这里:为什么CSS hsl作业需要回退颜色?

color: #ff8000; 
    color: hsl(30, 100%, 50%); 

因此很明显,这第一受让人#ff8000的类,然后如果HSL值“取”它会覆盖以前的作业。但为什么这是必要的?当使用所有类型的颜色分配时,确实不需要“后备颜色”?

+0

是它的顺序也界定?正如'hex'然后'hsl'? – eggy

+0

是;这是一个“逐字”复制和粘贴作业。 –

回答

20

在开始的时候,有三种方式来指定颜色:

  1. hexadecimal格式(#3FC408),即使用3或六个字符,

  2. 命名的颜色(如redblueblack),和

  3. rgb() - ,其中在括号,你会为每个从0颜色(红,绿,蓝)的数值参考255

CSS3以来增加了一些新的色彩格式,包括:

  1. rgba() - 红,蓝,绿,α(不透明度),

  2. hsl() - 色调,饱和度和亮度,以及

  3. hsla() - 色相,饱和度,亮度和alpha(不透明度)。

虽然这些新的色彩格式带来的灵活性,开发者如何定义颜色显着的量和它们之间的关系,也可以留下旧的浏览器看,由于不兼容差于预期。

问题是浏览器中的CSS解析器会跳过名称或值未被理解的属性。较旧的浏览器(如Internet Explorer 8及更早版本)不了解rgba(),hsl()hsla(),,因此将放弃包含它们的任何声明。

考虑以下几点:描述

.box { 
    background: #000; 
    color: rgba(100, 100, 200, 0.5); 
} 

支持的浏览器会将此CSS代码。不支持的浏览器将完全删除颜色属性,因为该值不被理解。这意味着实际使用的颜色将从周围环境中继承,并可能实际上最终变黑(与背景相同)。为防止这一点,你应该总是包含十六进制,命名,或RGB()格式的回退的颜色,如:

.box { 
    background: #000; 
    color: blue; 
    color: rgba(100, 100, 200, 0.5); 
} 

ReSharper的什么是问你做的是提供一个备用的色彩。这种后备颜色应该始终在之前新颜色,以确保旧版浏览器正确地查看和使用它,并且较新的浏览器继续使用较新的颜色格式。

的更多信息:

https://github.com/stubbornella/csslint/wiki/Require-fallback-colors

3

http://caniuse.com/#search=hsl

IE8-不支持HSL色彩空间。除此之外,您不需要回退。这也是相当琐碎HSL转换为十六进制,所以你可以一直只使用十六进制