2013-06-12 30 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轉換爲十六進制,所以你可以一直只使用十六進制