搜尋

Less 教學:變數、import

雖然原生的 CSS 已經有變數和 import 等功能,但 Less 在這些功能上表現得又更為強大,這篇教學會介紹如何在 Less 中使用變數和 import。

快速導覽:

CSS 教學 - Less 教學:變數、import

Less 變數

原生 CSS 使用「--」開頭作為變數或自訂屬性的識別符號,而 Less 則是使用「@」開頭作為變數的識別符號,變數名稱按照基命名規則,*使用英文字母大小寫開頭,可搭配數字或底線,使用變數雖然很簡單,但 Less 變數和原生 CSS 變數有「本質差異」:

CSS 變數:直接在 CSS 中使用,在純 CSS 中「會」看到變數名稱,參考「CSS 變數」。 Less 變數:轉換成 CSS 之後會變成對應的數值,在純 CSS 中「不會」看到變數名稱

Less 變數替換屬性值

Less 變數的數值可放入 CSS 各種屬性值,轉換後會將這些數值放入對應的位置。

/********** Less 寫法 **********/
@color1: blue;
@color2: red;
@size30: 30px;
a {color: @color1;}
a:hover {color: @color2;}
h2 {font-size: 30px;}


/********** 轉換成 CSS **********/
a {color: blue;}
a:hover {color: red;}
h2 {font-size: 30px;}

Less 變數替換選擇器名稱或內容

Less 變數除了可以取代屬性值,也可以使用「@{變數名稱}]」替代選擇器「名稱」,下方會將元素的 class 名稱替換為變數的寫法。

/********** Less 寫法 **********/
@name1: apple;
@name2: oxxo;
h2.@{name1} {color: red;}       /* 注意替換名稱的寫法 */
h2.@{name1}-123 {color: blue;}
h2.@{name2} {font-size: 30px;}
h2.@{name2}-123 {font-size: 20px;}


/********** 轉換成 CSS **********/
h2.apple {color: red;}
h2.apple-123 {color: blue;}
h2.oxxo {font-size: 30px;}
h2.oxxo-123 { font-size: 20px;}

使用同樣的做法也可以替換屬性內容,下方的範例會將圖片 url() 的內容使用變數的方式呈現。

/********** Less 寫法 **********/
@website: "https://steam.oxxostudio.tw/";
.banner {
  background: url("@{website}img/oxxo.jpg");
}


/********** 轉換成 CSS **********/
.banner {
  background: url("https://steam.oxxostudio.tw/img/oxxo.jpg");
}

由於 Less 變數使用「字串」的方式替換內容,如果有比較複雜的需求 ( 例如漸層色 ),就需要採用替換變數替換變數內容的做法,才能產生正確的結果。

/********** Less 寫法 **********/
@name1: apple;
@name2: oxxo;
h2.@{name1} {color: red;}       /* 注意替換名稱的寫法 */
h2.@{name1}-123 {color: blue;}
h2.@{name2} {font-size: 30px;}
h2.@{name2}-123 {font-size: 20px;}


/********** 轉換成 CSS **********/
h2.apple {color: red;}
h2.apple-123 {color: blue;}
h2.oxxo {font-size: 30px;}
h2.oxxo-123 { font-size: 20px;}

使用同樣的做法也可以替換屬性內容,下方的範例會將圖片 url() 的內容使用變數的方式呈現。

/********** Less 寫法 **********/
@color1: red;
@color2: blue;
@bg: linear-gradient(to right, @color1, @color2);
.main {
  background: @bg;
}


/********** 轉換成 CSS **********/
.main {
  background: linear-gradient(to right, red, blue);
}

Less 變數取值

Less 變數不一定要在使用之前宣告,使用後再宣告也不會發生錯誤,下方範例會在使用 @color 之後才宣告變數,仍然會產生正確的結果。

/********** Less 寫法 **********/
h1{color: @color}
@color: red;      /* 放在後方才宣告 */


/********** 轉換成 CSS **********/
h1 {color: red;}

Less 的變數取值和 CSS 相同,會取用最靠近元素的變數,例如同層級有變數就會先採用這個變數,如果同層級沒有變數,就會向父層級取用變數,下方範例會展示不同層級中都有相同名稱但不同內容的變數,最後取用結果就會採用最靠近元素的變數。

/********** Less 寫法 **********/
@color: red;
  
.apple {
  @color: blue;
  color: @color;
  .oxxo {
    @color: green;
    color: @color;
    .banana {
      @color: yellow;
      h2 {
        color: @color;
      }
    }
  }
}
h2 {
  color: @color;
}


/********** 轉換成 CSS **********/
.apple {color: blue;}
.apple .oxxo {color: green;}
.apple .oxxo .banana h2 {color: yellow;}
h2 {color: red;}

Less 變數可以賦值給不同的 Less 變數,也可以搭配原生的 CSS 變數共同使用,下方範例會呈現不同變數之間互相賦值的效果。

/********** Less 寫法 **********/
@color1: red;
@color2: @color1;
:root {
  --oxxo: @color2;
  @color3: var(--oxxo);
}
.apple {color: @color2;}
.oxxo {color: var(--oxxo);}


/********** 轉換成 CSS **********/
:root {--oxxo: red;}
.apple {color: red;}
.oxxo {color: var(--oxxo);}

Less 變數除了使用宣告的方式賦予數值,3.0 版本之後也可以使用「樣式」作為變數,使用方式需要改用「$」開頭作為識別符號,使用時同樣會取用最靠近元素的變數作為屬性值,下方範例會使用 color 樣式作為變數。

/********** Less 寫法 **********/
.apple {
  color: red;
  background-color: $color;
  .oxxo {
    background-color: $color;
    .banana {
      color: blue;
      background-color: $color;
    }
  }
}


/********** 轉換成 CSS **********/
.apple {
  color: red;
  background-color: red;
}
.apple .oxxo {
  background-color: red;
}
.apple .oxxo .banana {
  color: blue;
  background-color: blue;
}

Less 變數搭配 @media

@media 是使用 CSS 製作 RWD 網頁必備的技能,如果將 Less 變數搭配 @media,就能透過巢狀結構撰寫 @media,轉換後就會將 @media 獨立成原本 CSS 的格式。

/********** Less 寫法 **********/
@min768: (min-width: 768px);
@min1024: (min-width: 1024px);
.apple {
  @media @min768 {
    font-size: 1.2rem;
  }
}
.oxxo {
  @media @min1024 {
    font-size: 1.2rem;
  }
}


/********** 轉換成 CSS **********/
@media (min-width: 768px) {
  .apple {
    font-size: 1.2rem;
  }
}
@media (min-width: 1024px) {
  .oxxo {
    font-size: 1.2rem;
  }
}

如果巢狀結構中的 @media 裡還包覆著其他 @media,轉換後會自動變成 and 的形式。

/********** Less 寫法 **********/
@min768: (min-width: 768px);
@max1024: (max-width: 1024px);
.apple {
  @media @min768 {
  @media @max1024 {
    font-size: 1.2rem;
  }
  }
}


/********** 轉換成 CSS **********/
@media (min-width: 768px) and (max-width: 1024px) {
  .apple {
    font-size: 1.2rem;
  }
}

使用 @import 載入其他 Less 檔案

Less 和原生的 CSS 一樣都有提供「@import」功能,為了區隔和原生 CSS 的 @import,Less 額外提供「載入選項」的設定,使用的語法為「@import (選項) 載入的檔案」。

選項 說明
reference 使用 Less 檔案但不輸出它。
inline 在輸出中包含來源檔案但不對其進行處理。
less 將任何文件視為 Less 文件。
css 將任何文件視為 CSS 文件。
once ( 預設值 ) 僅包含檔案一次。
multiple 多次包含該檔案。
optional 找不到檔案時繼續編譯。

使用「once」選項預設值時,則後方名同的檔案就會被忽略。

/********** Less 寫法 **********/
@import "apple.less";
@import "apple.less";   /* 這行會被忽略 */
@import (once) "oxxo.less";
@import (once) "oxxo.less";   /* 這行會被忽略 */

如果使用「multiple」選項預設值時,則會重複載入相關內容。

/********** oxxo.less 內容 **********/
a {color: red;}

/********** Less 寫法 **********/
@import (multiple) "oxxo.less";
@import (multiple) "oxxo.less";

/********** 轉換成 CSS **********/
a {color: red;}
a {color: red;}   /* 重複載入 */

如果要在 Less 中使用原生 CSS 的 @import,則需要特別標注「css」選項下方寫法:

/********** Less 寫法 **********/
@import (css) "oxxo.css";

/********** 轉換成 CSS **********/
 @import "oxxo.css";

小結

這篇教學所介紹的 Less 變數用法,和原生 CSS 的變數有著本質上的不同,但相對來說如果程式碼非常複雜,使用 Less 變數就能大幅簡化這些程式碼,也更容易進行管理。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 使用巢狀結構語法 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

全域關鍵字與文字數值 長度與角度單位 位置名稱與時間單位 特殊樣式屬性 ( all、appearance)

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer ) 定義字型 ( @font-face ) 計數規則 ( @counter-style ) 列印網頁 ( @page )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path ) 生成內容與引號

顏色與濾鏡

顏色單位 色彩模型 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄 使用 Icon Font ( 圖示文字 ) 製作自己的 Icon Font

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 ( border-radius ) 影像邊框 ( border-image ) 輪廓 ( outline ) 內容溢出與裁切 ( overflow ) 內容範圍 ( contain ) 可見性與透明度

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 ( shape-* ) 定位 ( position ) 邏輯屬性 ( logical properties ) 水平置中技巧 垂直置中技巧

Flex 彈性排版

Flexbox 彈性盒子 Flex 對齊方式 Flex 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序 動畫進度控制 ( timeline )

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 平移、旋轉與縮放 3D 轉換與透視

視窗與使用者行為

捲軸樣式 ( scrollbar ) 拉霸、滑桿樣式 ( slider ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll ) 列印換頁 ( break-* )

CSS 預處理器

認識 CSS 預處理器 Less ( 安裝、開始使用 ) Less ( 巢狀結構、選擇器 ) Less ( 變數、import ) Less ( Extend、Mixin ) Less ( 邏輯、迴圈、函式 )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫 彈跳的正方形動畫 3D 正多面體 超連結底線動畫效果 噁心黏黏球效果 漸層色製作星空背景 CSS 視差滾動效果 捲軸控制放射形選單 捲軸改變文字背景色 CSS 頁面捲動進度條 CSS 水波效果 圓點載入動畫 ( 陰影動畫 )