iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 15
3

我們已經會用選擇器來指定我們要的元素,選擇器框內放入樣式聲明,才能夠幫元素套樣式,還記得我們說到CSS語法時,樣式聲明是屬性(property)跟屬性值(value)組成的:

property: value;

接下來的幾篇我們要介紹常用到的屬性(property)及屬性值(value)。

首先要認識的屬性值是color。

color

CSS的顏色屬性值不只一種表現方式,前幾篇示範我們的color屬性值都直接填入顏色名稱(如red、green、blue),但是名稱表現的顏色是有限的,我們今天要來介紹色碼,可以表現顏色的多樣性。color的屬性值有幾種表現方法:

  • hex色碼

    網路世界常用到的色碼,說到hex色碼就得說到十六進制。十六進制不像我們生活中慣用的十進制,從一數到九,第十就進位為10,當它數到第十時,還不能進位(因為它是十六才進位),所以數到十、十一、十二、十三、十四、十五,是用a、b、c、d、e、f表示,數到第十六才進位為10。

    十六進制的數數就會是:1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、10

    這就是大家常看到色碼常寫成 #e66fa4#23cd48這種形式,色碼是以#為開頭,後面接光學三原色紅綠藍的十六進制數值,來表示色彩強度。前兩位數字是紅色,中間兩位是綠色,最後兩位是藍色。

    從光學三原色的圖,我們可以知道#ffff00是黃色、#00ffff是淺藍色、#ff00ff是桃紅色,可以知道當 #ffffff,顏色是白色(白色無法用#101010101010來表示,因為hex色碼最多六位數,這樣會溢位,所以白色是用#ffffff表示)、#000000顏色是黑色。那可以再推論知道當六個數字都是一樣的,從#000000、#111111、#222222、#333333.......一直到#fff就是從黑到白的灰階,六個數字一樣,又可以寫成#000、#111、#222......等。

    我們可以來試試看用對比色做出把人眼睛射瞎的效果強烈的風格:

      body {
          background-color: #ff00ff;
      }
    
      h1 {
          color: #00ff00;
      }
    

    若是把強度拉低一半,雖然是對比色,飽和度拉低之後視覺上相對沒那麼刺眼。

      body {
          background-color: #880088;
      }
    
      h1 {
          color: #008800;
      }
    

  • RGB、RGBA

    • RGB(Red, Green, Blue)色碼是用十進制表示,它的色階數跟hex色碼一樣多,所以16x16=256,所以白色是rgb(255, 255, 255),黑色是rgb(0 ,0 ,0)。CSS也可以用RGB色碼來表示。

        body {
        	color: rgb(0, 0, 256);
        }
      
        h1 {
        	color: rgb(256, 256, 0);
        }
      

    • RGBA(Red, Green, Blue, Alpha)除了RGB三個光學原色外,A是定義透明度的數值,數值為0~1,完全透明是0,半透明是0.5,不透明是1。所以要表示半透明的白色就是rgba(255, 255, 255, 0.5)。

        body {
        	color: rgb(0, 0, 256);
        }
      
        .strong {
        	color: rgba(256, 256, 0, 1);
        }
      
        .middle {
        	color: rgba(256, 256, 0, 0.7);
        }
      
        .soft {
        	color: rgba(256, 256, 0, 0.3);
        }
      

  • HSL&HSLA(Hue, Saturation, Lightness),相較hex色碼與RGB色碼用三原色混合很難判別結果,HSL用更直觀的方式來表示顏色(色相, 飽合度, 明度)。

    • HSL

      • 色相(Hue)就是直觀的紅色、橘色、黃色等。由數字0~360表示。

      • 飽和度(Saturation)是指色彩的純度。飽和度越高顏色越鮮豔 ; 飽和度越低看起來就越灰。用百分比來表示。

      • 明度(Lightness)是指色彩的亮度。用百分比來表示。

      • 我們可以從下圖來看色相、飽和度和明度:

      • 來練習看看,用藍色跟紅色的不同飽和度跟明度,來搭配出不同風格的色調:

          .strong_outer {
              background-color: hsl(240, 100%, 50%);
          }
        
          .strong_inner {
              color: hsl(0, 100%, 50%);
          }
        
          .soft_outer {
              background-color: hsl(240, 60%, 90%);
          }
        
          .soft_inner {
              color: hsl(0, 60%, 75%);
          }
        

        Try it on codepen.

    • HSLA(Hue, Saturation, Lightness, Alpha),跟RGBA一樣,在CSS裡也支援HSL有透明度的數值。

    單單聲明color這個屬性,它所渲染的部分是字(text)的顏色,但顏色屬性放在其它屬性宣告時,也能渲染其它網頁區塊或框線的顏色,比方border-colorbackground-color,這篇尚不贅言,等介紹background屬性跟border屬性時就會更清楚了。此篇僅筆記顏色屬性值的各種表示方法。

    今天的筆記告一段落,明天見囉~/images/emoticon/emoticon41.gif

    *有任何錯誤或描述不夠精準之處,歡迎指教,非常感謝。


上一篇
Day14 CSS:權重
下一篇
Day16 CSS基本樣式-單位與數值
系列文
從門外漢到前端新手30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
yachen
iT邦新手 4 級 ‧ 2019-09-30 09:36:21

超想學這個~讚!!

yachen iT邦新手 4 級 ‧ 2019-09-30 09:38:09 檢舉

不過你的codepen連結掛掉了QQ

JinWen iT邦新手 5 級 ‧ 2019-09-30 11:40:07 檢舉

喔喔嗚嗚感謝提醒,很常掛掉...(苦惱)/images/emoticon/emoticon04.gif

0
Chris
iT邦新手 4 級 ‧ 2019-10-12 14:41:59

RGB 是以「直視光」的方式理解色域,可以說是光本身,與光的混合來理解顏色。
HSL 是以「反射光」的方式理解色域,可以說是物體本身的顏色與環境光的結果,來理解顏色。

JinWen iT邦新手 5 級 ‧ 2019-10-12 15:58:37 檢舉

原來是這樣 <3 ,難怪HSL相對直觀,因為人眼是透過反射光在理解顏色的~

我要留言

立即登入留言