Sass 新手入門(3)函數應用

上一篇 Sass 進階應用,這篇列表 Sass 內建函數,及自定義函數的用法。


內建函數

lighten & darken

  • 基本語法

      :lighten( color, 50%)
      :darken( color, 50%)
  • 範例

      $color-main: #00F;
      $color-main-light30: lighten($color-main, 30%);
      $color-main-dark30: darken($color-main, 30%);
    
      a{
          background-color: $color-main;
          &:hover{
              color: $color-main-light30;
          }
          &:active{
              color: $color-main-dark30;
          }
      }


補充:關於hsl & hsla

一般網頁色瑪用 RGB(#00FF00)來定義,六個數字兩兩一組各代表紅色、綠色、藍色的色值,而色值是16進位制表示0~255之間(00 = 0,FF = 255)

  • hsla:
    • 色相(Hue): 0~360
    • 飽和度(Saturation): 0 ~ 100%
    • 亮度(Lightness): 0 ~ 100%
    • 透明度(alpha): 0 ~ 1
  • 基本語法

      hsl(0, 100%, 50%)
      hsla(0, 100%, 50%, 0.5 )
  • 範例

      span{
          color: hsl(20, 100%, 50%);
          background-color: hsla(20, 100%, 50%, 0.5);
      }


顏色函數

functiondoeg
adjust-hue(color, __deg)調整顏色的色相(hsl中的h)($main-color, 137deg)
saturate(color, __%)增加顏色的飽和度(hsl中的S)($main-color, 50%)
desaturate(color, __%)減少顏色的飽和度(hsl中的S)($main-color, 50%)
transparentize(color, 0.3)顏色變得更透明
(減少alpha值)
($main-color, 0.3)
原本alpha-0.3
opacify(color, 0._)顏色變得更不透明
(增加alpha值)
($main-color, 0.3%)
原本alpha+0.3
lighten(color, __%)增加顏色亮度(明度)($main-color, 30%)
darken(color, __%)減少顏色亮度(明度)($main-color, 30%)

數字函數

functiondoeg
abs()絕對值(-5)→5
round()取整數-四捨五入(-3.6)→4
(-3.1)→3
ceil()取整數-無條件進位(-3.6)→4
(-3.1)→4
floor()取整數-無條件捨去(-3.6)→3
(-3.1)→3
percemtage()計算比例(10px / 100px) → 10%
min()取最小值(1, 2, 3) → 1
max()取最大值(1, 2, 3) → 3

文字函數

functiondoeg
to-upper-case()字串轉大寫(Hello)→HELLO
to-lower-case()四捨五入取整數(Hello)→hello
str-length()回傳字串長度(Hello)→5
str-index(string, keyword)
(index從1開始)
查特定自在字串中的位置("Hello Eudora", "Hello")→1
str-insert(string, addString, index)字串中插入值("Hello", " Eudora", 5)→"Hello Eudora"

自定義函數

  • 語法

      @function name(argument1, argument2...){
          ...
          @return ...
      }
  • 例:搭配 map 應用

      $theme: (
          light: #ccc,
          dark: #222
      );
    
      @function theme($mode) {
          @return map-get($theme, $mode);
      }
    
      body {
          background-color: theme(dark);
      }

    compiled:

      body {
          background-color: #222;
      }

參考資料

- [顏色空間(HSV/HSB與HLS)的區別|ITREAD01.COM](https://www.itread01.com/content/1546155122.html)