iT邦幫忙

2026 iThome 鐵人賽

DAY 22
2

https://ithelp.ithome.com.tw/upload/images/20260910/20178826mM4VFrixaw.png

在設定 CSS 樣式時,我們常需要重複使用相同的顏色、數值,或處理數值間的相對關係。

CSS 提供了計算函數和變數功能,讓樣式設定更加靈活且易於維護。

Calc() 計算函數

calc() 函數允許在 CSS 中進行數學運算,支援加減乘除,並且能夠處理不同單位數值之間的運算。

/* 基本語法 */
width: calc(運算式);

/* 混合單位運算 */
.box {
  width: calc(100% - 80px);        /* 百分比減去固定值 */
  height: calc(100vh - 60px);      /* 視窗高度減去導航列 */
  padding: calc(1rem + 5px);       /* 相對單位加上固定值 */
}

  • 運算規則

    1. 加法和減法:運算符前後必須有空格

      width: calc(100% - 20px);     /* 正確 */
      width: calc(100%-20px);       /* 錯誤:缺少空格 */
      width: calc(50% + 30px);      /* 正確 */
      
    2. 乘法和除法:至少一個數值必須是數字

      width: calc(100% / 3);         /* 正確 */
      width: calc(2 * 50px);         /* 正確 */
      width: calc(100% * 2);         /* 正確 */
      font-size: calc(16px * 1.5);   /* 正確 */
      
  • 使用範例

    1. 頁面內容最小高度:全螢幕高度減去固定的導航列高度

      .content {
        /* 視窗高度減去 60px 導航列 */
        min-height: calc(100vh - 60px);
      }
      
    2. 響應式間距:滿版寬度減去兩側間距後,再水平置中

      .container {
        width: calc(100% - 40px);
       /* 兩側各留 20px 間距 */
        margin: 0 auto;
                 /* 水平置中 */
      }
      

      https://ithelp.ithome.com.tw/upload/images/20260910/2017882685Ig9fnoMu.png

    3. 動態字體大小:字體大小使用視窗寬度來微調

      h1 {
        font-size: calc(1.5rem + 2vw);
        /* 基礎大小 + 視窗寬度的 2% */
      }
      

變數定義與使用

CSS 變數讓我們可以定義可重複使用的值,提高程式碼的可維護性。

  • 定義變數

    定義變數時,名稱必須以兩個連字符(--)開頭。一般會習慣將全域變數設定在 :root 偽類當中,:root 代表文件的根元素(即 <html>),是定義全域變數的最佳位置:

    /* 定義變數 */
    :root {
      --primary-color: #007bff;
      --font-size-base: 16px;
      --spacing-unit: 8px;
    }
    
    /* 使用變數 */
    .button {
      background-color: var(--primary-color);
      font-size: var(--font-size-base);
      padding: var(--spacing-unit);
    }
    
  • 使用變數

    變數可透過 var() 函數來引用,並且能設定備用值。

    /* 基本使用 */
    .element {
      color: var(--primary-color);
    }
    
    /* 設定備用值 */
    .element {
      color: var(--primary-color, #007bff);
        /* 如果 --primary-color 未定義,使用 #007bff */
    }
    
    /* 嵌套變數 */
    :root {
      --base-color: #007bff;
      --light-color: var(--base-color);
    }
    

    變數也可以在 calc() 函數中使用變數進行計算。

    .box {
      padding: calc(var(--spacing-unit) * 2);
      width: calc(100% - var(--sidebar-width));
    }
    
  • 變數作用範圍

    變數具有作用域,子元素會繼承父元素的變數值。

    1. 變數層級繼承的特性:設定一個全域變數 --text-color 為黑色,將文字 p 使用 --text-color 變數設為文字顏色,當容器 .box 將 --text-color 設定為白色,那麼在 .box 內部的 p 因為有使用
--text-color 因此變為白色,而在 .box 外部的 p 則還是維持黑色。

      https://ithelp.ithome.com.tw/upload/images/20260910/20178826msJqjoj2PT.png

    2. 不同按鈕顏色設定:將按鈕基礎的樣式 .btn 設定好後,將按鈕顏色使用 --btn-color 變數進行管理,其他顏色的按鈕,就可以只需修改 --btn-color 變數就可以修改顏色。其中,變數也可以互相引用,例如可以將 --btn-color 套用上 --primary-color 變數的值。

      https://ithelp.ithome.com.tw/upload/images/20260910/20178826OxK0bFLMRf.png

  • 配合行內樣式使用

    CSS 變數也能應用於行內樣式中,可以直接設定特定元素的變數值,實現共用樣式但呈現不同效果的設計。

    1. 設定不同的顏色區塊:在行內樣式中,修改顏色變數,可以製作一個方便換顏色的區塊。

      <div class="box" style="--box-color: blue;">
        藍色區塊
      </div>
      <div class="box" style="--box-color: red;">
        紅色區塊
      </div>
      
      .box {
        width: 200px;
        text-align: center;
        color: #fff;
        background-color: var(--box-color);
      }
      
    2. 進度條:在行內樣式中,修改寬度變數,可以控制進度顯示的百分比。

      <!-- 進度 0% -->
      <div class="progress" style="--bar-width: 0%">
        <div class="progress-bar"></div>
      </div>
      <!-- 進度 80% -->
      <div class="progress" style="--bar-width: 80%">
        <div class="progress-bar"></div>
      </div>
      <!-- 進度 100% -->
      <div class="progress" style="--bar-width: 100%">
        <div class="progress-bar"></div>
      </div>
      
      :root {
        --bar-width: 0%;
      }
      .progress {
        width: 200px;
        height: 20px;
        border: 1px solid #000;
        .progress-bar {
          height: 100%;
          width: var(--bar-width);
          background: #99c794;
        }
      }
      
  • 動態變數修改

    變數可以透過 JavaScript 動態修改,實現主題切換等功能:

    :root {
      --theme-color: #007bff;
    }
    .button {
      background: var(--theme-color);
    }
    
    // 修改變數值
    document.documentElement.style.setProperty('--theme-color', '#dc3545');
    
    // 讀取變數值
    const themeColor = getComputedStyle(document.documentElement)
      .getPropertyValue('--theme-color');
    
    

總結

今天介紹了 CSS 計算函數與變數的使用方法,從 calc() 函數到 CSS 變數的定義與應用。透過這些具體技術和範例,你現在能夠:

  1. 使用 calc() 函數進行不同單位間的數學運算
  2. 定義常用的變數,提高樣式的可維護性和重用性
  3. 掌握變數的作用域和繼承特性,靈活運用於不同情境

掌握這些技巧後,你將能創建更靈活、易於維護且具動態特性的樣式。

https://ithelp.ithome.com.tw/upload/images/20260910/20178826tqtg5nUyTE.png


上一篇
Day 21 - Animation 動畫效果
系列文
CSS 到底在幹嘛?30 天拯救你被 AI 爆改的網頁排版!22
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

1
RayYuanLiu
iT邦新手 4 級 ‧ 2026-09-10 18:22:14

先讚,再看

第一次看到饅頭算數學,燒腦讓饅頭變成爺爺了

饅頭 iT邦新手 5 級 ‧ 2026-09-11 00:10:35 檢舉

好耶!最不想算數學

1
AndyAWD
iT邦新手 1 級 ‧ 2026-09-10 23:44:59

原來 css 也有變數

饅頭 iT邦新手 5 級 ‧ 2026-09-11 00:10:46 檢舉

沒錯!好好用!

我要留言

立即登入留言