§

Options

Minify options
§

貼上 CSS

§

壓縮後的 CSS

css
§

節省百分比

  • 原始大小
  • 壓縮後大小
  • 節省
  • 節省百分比

台灣前端團隊將 CSS 壓縮視為正式環境的必要步驟,因為 Google Lighthouse 效能稽核會標記未壓縮的樣式表。典型的 Next.js 或 Remix 行銷網站在去除注釋、縮排與冗長十六進位形式後,通常能從手工撰寫的 CSS 節省 20 至 40%,這足以讓 Largest Contentful Paint 分數從橘色進入綠色區間。在提交前於瀏覽器分頁中執行壓縮,可省去安裝 PostCSS 外掛的步驟,同時取得相同的位元組數。

CSS 壓縮的運作原理

壓縮器以具狀態感知的 tokenizer 走訪你的樣式表,區分受保護區域(字串字面值與 url() 值)與可安全折疊和移除的可編輯空白。

  1. 保護字串與 URL. 在任何其他轉換之前,tokenizer 先識別每個引號字串("…" 或 '…')以及每個 url(…) 引數並原樣暫存。後續處理絕不觸及這些位元組,因此含空格的 background-image URL 或含標點的 content 屬性值都會精確保留。
  2. 移除注釋. 開啟切換時,/* … */ 區塊會被移除。如果同時開啟授權注釋切換,/*! … */ 區塊則會保留,讓 MIT、Apache 和 BSD 授權標頭依這些授權要求留存於輸出中。
  3. 折疊空白. 每段連續的空格、定位字元和換行折疊為單一空格,然後去除 CSS 結構字元 {};:, 周圍的空白。選擇器與值列表的重排方式與瀏覽器解析器讀取它們的方式相同。
  4. 最佳化值. 選擇性步驟會將十六進位色碼轉為小寫、將成對的 6 位數十六進位通道折疊為 3 位數簡寫(#aabbcc#abc),並去除零值的尺寸單位(0px0)。去除零值步驟會跳過 transform() 呼叫內部的值,因為該情境下單位是必要的。
  5. 回報位元組節省. 原始文字與壓縮文字都以 new TextEncoder().encode(…).byteLength 測量——這正是 CDN 或 HTTP 伺服器在連線上看到的 UTF-8 位元組數。指標列顯示原始大小、壓縮後大小、節省的位元組數以及節省百分比。

為什麼要壓縮 CSS?

  • 更快的渲染阻塞載入. 瀏覽器在完成 CSS 解析前不會繪製任何像素。樣式表減少 30% 能縮短這段阻塞時間、提升 First Contentful Paint,並直接反映在你的 Lighthouse 效能分數上。
  • 更低的 CDN 出網費用. CloudFront、Cloudflare 和 Fastly 均按每 GB 出網流量計費。每次頁面瀏覽都傳輸的樣式表削減 20%,一旦每月流量突破數百萬次瀏覽,就會在帳單上形成真實的費用差異。
  • 更小的嵌入式與電子郵件 CSS. 交易電子郵件範本需要將 CSS 內嵌以確保在 Outlook 和 Gmail 中正常渲染,每多一個位元組都使你更接近 Gmail 的 102 KB 裁截門檻。內嵌前先壓縮可讓郵件大小維持在上限以下。
  • 無需建置工具依賴. 偶發性的一次性工作、沒有建置流程的老舊 repo,以及隔離網路的環境,並不總是能容納 Node.js 工具鏈。你可以在這裡直接執行壓縮,無需安裝 PostCSS、cssnano 或任何其他工具。

常見應用場景

CSS 壓縮幾乎出現在每個前端建置流程的末尾,以及少數 runtime 情境中,在這些情境下位元組數量至關重要。

  • 正式環境建置流程:Webpack、Vite、Rollup 和 Parcel 在正式建置模式的預設設定中都包含 CSS 壓縮步驟。在提交前於此執行壓縮,可讓你在不觸發完整建置的情況下驗證輸出。
  • 將 CSS 嵌入 <style> 標籤:將關鍵 CSS 內嵌於 HTML 文件的伺服器渲染框架,受益於與獨立樣式表相同的位元組節省,而較小的內嵌 CSS 也能縮短 Time to First Byte。
  • 交易與行銷電子郵件:電子郵件 HTML 需要內嵌所有 CSS,因此樣式表中的每一 KB 都會增加到郵件總大小。內嵌前先壓縮可讓郵件大小維持在 ESP 大小上限以下。

實際操作範例

貼上一個 1 KB 的規則集,含兩空格縮排、選擇器之間的空白行、頂部的授權注釋區塊,以及冗長的十六進位色碼(如 #FFFFFF)和加零填充的邊距(如 margin: 0px)。開啟所有選項後,輸出折疊至約 600 位元組——節省約 40%——而渲染後的頁面與原始碼在位元組上完全相同。

壓縮會改變我的 CSS 行為嗎?

使用預設切換時不會。壓縮器只移除 CSS 解析器已捨棄的位元組——空白、注釋、選擇性的最後分號——並在單位有意義的 transform() 內部跳過處理。每個選擇器、屬性與值都會保留。

支援 SCSS 或 LESS 嗎?

僅在編譯為純 CSS 後才支援。SCSS 和 LESS 語法(變數、巢套、mixin、& 父選擇器)不是有效的 CSS,壓縮器會破壞它。請先編譯預處理器原始碼,再將編譯輸出貼入此處。

為什麼我的授權注釋被移除了?

「移除注釋」預設為開啟,會清除每個 /* … */ 區塊。啟用「保留 /*! 授權注釋」以保留以 /*! 開頭的區塊。MIT、Apache 和 BSD 授權均要求版權標頭隨重新發布的 CSS 一同出現。

我能節省多少?

手工撰寫的 CSS 通常能節省 15 至 35%。含大量注釋或深度縮排且有許多色碼字面值的檔案可達 40%。Sass 或 CSS-in-JS 編譯輸出通常已部分壓縮,節省較少——典型為 5 至 15%。

在瀏覽器分頁中執行 CSS 壓縮,可完全省去 Node.js 工具鏈。在上方貼上樣式表,調整選項以符合你想要的壓縮積極程度,然後複製輸出或下載為 .min.css。無需上傳、無需帳號、無需供應商函式庫。