CSS 中顏色的表示

當我在已經(jīng)忘記了還有 HSL 這么個東西,最近卻又用上了它的時候,我覺得還是有必要寫一點關于顏色的總結(不涉及 IE)

CSS 中的顏色是以光的三原色 紅-RED,綠-GREEN,藍-BLUE 為基礎表示出來的。其表示方法大致可以分為 顏色名稱,RGB,HEX,HSL 四類

顏色名稱

/* color: colorName */
p { color: red; }

這個沒太多說的,就是用顏色的 英文名稱 直接表示,名稱具體對應的 HEX值 可以 參照頁面

RGB

/* 
    color: rgb(red, green, blue)
    color: rgba(red, green, blue, alpha)    
*/
p {
    color: rgb(255, 255, 255);
    background-color: rgba(0, 0, 0, .5)
}

RGB 的 3 個參數(shù)分別對應 red,greenblue。它是紅綠藍三色在數(shù)值上的直觀體現(xiàn),取值范圍為 0~255,也可以是 0%~100%,但要注意的是,數(shù)值和百分比不能混合使用,rgb(255, 0, 0 ) 換成百分比,需要寫作 rgb(100%, 0%, 0%),否則屬于無效屬性。

RGBARGB 的基礎上增加了 alpha 屬性,用來設置透明度,取值范圍為 0~1,請不要嘗試使用百分比 :)

HEX

/* color: hex */
p { color: #ffb500; }

HEX 就是十六進制,這是頁面開發(fā)中使用頻率最高的顏色表示方法。它的值是由紅綠藍三色數(shù)值的十六進制數(shù)組合而成。這樣說可能有點繞口,讓我們把上面例子中的值拆分成 4 個部分:#,ffb5,00

  • 第 1 部分 # 相當于十六進制顏色的識別符,告訴瀏覽器后面跟上的是表示顏色的十六進制數(shù)
  • 第 2 部分 ffred 的十六進制數(shù)值,換算成十進制就是 15 * 16 + 15 = 255
  • 第 3 部分 b5green 的十六進制數(shù)值,換算成十進制就是 11 * 16 + 5 = 181
  • 第 4 部分 00blue 的十六進制數(shù)值,換算成十進制就是 0 * 16 + 0 = 0

因此,HEX 與 RGB 相互轉換的過程可以分解為

#ffb500 ←→ rgb(ff, b5, 00) ←→ rgb(255, 181, 0)

而當 3 個十六進制數(shù)值的兩位數(shù)都重復時(#ff0000),可以采用簡寫形式(#f00)。

HSL

/*
    color: hsl(hue, saturation, lightness)
    color: hsla(hue, saturation, lightness, alpha)
*/
p {
    color: hsl(0, 0%, 100%);
    background-color: hsla(0, 0%, 0%, .5)
}

HSL 對于我個人來說是不太好理解的(色彩基礎弱雞)。它有 3 個參數(shù):

  • H:Hue(色調(diào))。取值范圍為:0~360,0(或360)表示紅色,120表示綠色,240表示藍色。但實際上它是一個圓環(huán)的形式,因此當取值小于 0 或大于 360 時,這個值仍然是有效的
  • S:Saturation(飽和度)。取值為:0%~100%。這個值決定了顏色的鮮艷程度,當它為 100% 時,會將當前色調(diào)完全展示出來,而隨著百分比的降低,顏色的鮮艷程度會降低,表現(xiàn)出來的視覺效果就是顏色逐漸變灰
  • L:Lightness(亮度)。取值為:0%~100%。這個值和飽和度不同,并不是越高表現(xiàn)力越強。假定給它設定一個標準值為 50%,那么它在這個標準值時,表現(xiàn)出來的色調(diào)是最正的。當它高于或者低于標準值時,就會像照相一樣,曝光過度導致相片泛白,或者曝光不足導致相片發(fā)黑

所以如果用 HSL 來表示紅綠藍三色,就是 red: hsl(0, 100%, 50%) green: hsl(120, 100%, 50%) blue: hsl(240, 100%, 50%)。當你需要隨機產(chǎn)生一些比較鮮艷的顏色時,把 hue 單獨作為變量是個不錯的選擇。

RGBA 一樣,HSLA 也有一個 alpha 屬性來調(diào)節(jié)透明度。

另外關于 HSLRGB 之間的轉換,可以 參考頁面

關于透明度

rgbhsl 有相應的 rgbahsla 來設置透明度,對于 顏色名稱HEX 來說,就是使用 opacity,但是兩者之間是有區(qū)別的。

opacity 是針對元素的透明度,p { opacity: .5 } 這樣的設置會使元素整體透明,包括它的子元素。

alpha 是針對元素樣式屬性的透明度,p { background-color: rgba(0, 0, 0, .5) } 這樣的設置只會使元素的背景色透明,并不會影響到其他屬性(比如 color),也不會對子元素起效果。

其他

顏色對于前端來說其實是比較基礎的東西,它的內(nèi)容不多,但是不熟悉的話也會引起一些小麻煩。比如通過 element.style.color = '#f00' 將元素的字體設為紅色,再想通過 #f00 來操作 DOM 是不能實現(xiàn)的,因為瀏覽器(非IE)會自動將 #f00 轉換成 rgb(255, 0, 0) 之后再加入到元素的行間樣式中 :)

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • FreeCodeCamp - HTML5 and CSS 發(fā)現(xiàn)原來在另外一臺電腦學 FreeCodeCamp 的時...
    付林恒閱讀 9,647評論 2 17
  • 參考資料: w3cschool 《CSS揭秘》 【CSS進階】CSS 顏色體系詳解——Coco 請注意,如果你了解...
    HappyAdu閱讀 1,156評論 0 1
  • CSS 通過使用十六進制代碼設置特定的顏色預覽模式 你是否知道在 CSS 中還有其他表示顏色的方法?其中的一種方法...
    followyounger1閱讀 975評論 0 1
  • CSS的基本知識很簡單,你只要知道有哪些基本樣式屬性、CSS的選擇器,怎么在頁面應用CSS,就可以隨便倒騰試試手了...
    四光年閱讀 1,602評論 4 23
  • 你嬌艷如花 卻似 放下的毒藥 好奇的我總會忍不住品嘗 他們說是毒 我也知 可依舊忍不住 因為 我有一個向死而生的理...
    伊蘇灬卡爾閱讀 211評論 0 1

友情鏈接更多精彩內(nèi)容