首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau
百百 BLOG
首頁
學習紀錄
遊戲心得影視Life書單案件檔案
Side Projects委託作品與二創互動實驗場
Kurau

Kurau Blog

「隨心而寫,真真假假,都是我」

一個記錄生活、輸出興趣的個人空間。
遊戲、影視、閱讀、學習……每一段體驗都值得留下文字。

頁面導覽

  • 學習紀錄
  • 遊戲心得
  • 影視Life
  • 書單
  • 委託作品與二創
  • Kurau
  • 合作邀請

找到我

歡迎來 Discord 找我聊天!

“曾經發生的事不可能忘記,只是暫時想不起來而已。”-《神隱少女》

© 2026 Kurau All rights reserved

前端基礎

SCSS 編譯 前綴問題

By Kurau·2023-05-09·Updated 2026-05-09·3 分鐘閱讀

SCSS 編譯 vendor prefix 問題

TL;DR
別擔心、別手寫 vendor prefix。Next.js / Vite / CRA 都內建 Autoprefixer,會根據 browserslist 自動加 -webkit- / -moz- 等前綴。你寫標準 CSS 就好。

什麼是瀏覽器前綴?

歷史遺物 —— 為了讓尚未標準化的 CSS 屬性能在不同瀏覽器跑,廠商會加自家前綴:

/* 手寫前綴的時代(別這樣做了!) */
-webkit-transform: rotate(45deg);  /* Chrome, Safari, 舊 iOS */
-moz-transform: rotate(45deg);     /* 舊 Firefox */
-ms-transform: rotate(45deg);      /* IE 9 */
-o-transform: rotate(45deg);       /* Opera */
transform: rotate(45deg);          /* 標準 */
css

2026 年的現實:transform 早已是標準,所有現代瀏覽器都直接支援。手寫前綴 = 浪費 bundle size + 維護成本。


自動化方案:Autoprefixer

Autoprefixer 是 PostCSS 插件,讀你的 browserslist 設定,自動加 / 刪前綴。

npm install -D postcss autoprefixer
bash
/* 你寫的 */
.box { display: flex; user-select: none; }

/* Autoprefixer 編譯後(根據 browserslist) */
.box {
  display: flex;
  -webkit-user-select: none;
  -ms-user-select: none;          /* IE 11 */
  user-select: none;
}
css

各框架的內建情況

框架 / 工具Autoprefixer設定方式
Next.js✅ 內建package.json 的 browserslist
Vite✅ 內建package.json 的 browserslist 或 build.cssTarget
Create React App✅ 內建package.json 的 browserslist
Webpack(自建)❌ 需手動加 postcss-loader + postcss.config.js
Tailwind✅ 內建走 PostCSS pipeline

設定 browserslist

package.json:

{
  "browserslist": [
    ">0.5%",
    "last 2 versions",
    "Firefox ESR",
    "not dead"
  ]
}
json

這個設定決定 Autoprefixer 要為哪些瀏覽器加前綴。範圍越大 → CSS 越肥。實務上 >0.5% + not dead 已經 cover 95%+ 使用者。


自建 Webpack / 純 PostCSS 怎麼設

postcss.config.js:

module.exports = {
  plugins: {
    autoprefixer: {},
  },
};
javascript

webpack.config.js:

module.exports = {
  module: {
    rules: [{
      test: /\.scss$/,
      use: ['style-loader', 'css-loader', 'postcss-loader', 'sass-loader'],
      //                                   ^^^^^^^^^^^^^^^ 必須在 css-loader 後
    }],
  },
};
javascript
loader 順序很重要
Webpack loaders 從右往左跑:sass-loader(SCSS→CSS)→ postcss-loader(加前綴)→ css-loader → style-loader。順序錯了 PostCSS 處理不到結果。

何時還是要手動處理

雖然 Autoprefixer 很萬能,但 有幾個邊角情況 還是要注意:

1. 非標準屬性

像 -webkit-overflow-scrolling: touch(iOS 慣性滾動)、-webkit-tap-highlight-color(行動點擊高亮),這些不是「未標準化的標準屬性」 ,Autoprefixer 不會幫你加。要的話自己寫。

2. CSS Custom Properties / @supports

@supports (backdrop-filter: blur(10px)) {
  .glass { backdrop-filter: blur(10px); }
}
@supports not (backdrop-filter: blur(10px)) {
  .glass { background: rgba(255,255,255,0.8); }
}
css

特性偵測 比加前綴更現代。Safari 有些屬性還是要 -webkit-backdrop-filter,但用 @supports 配 fallback 更乾淨。


檢查實際 CSS 輸出

開發時打開 DevTools → Computed → 看實際 applied 的屬性。Autoprefixer 加的前綴會出現在那。Build 時可以跑:

# Next.js
npm run build && cat .next/static/css/*.css | grep -- '-webkit-'
bash

確認前綴有正確加上去。

目錄

    ◆ 相關文章

    • 書庫皮膚-bookshelf-spine-與-warm-editorial

      2026-06-03
    • iframe 嵌入

      2026-05-09
    • html link作法

      2026-05-09
    • 拖曳事件 (DragEvent)

      2026-05-09
    ← 上一篇Framer Motion 打造比最棒還要棒的動畫下一篇 →Git教學

    ◆ 關於作者

    Kurau

    個人寫作 / 創作的 SoT,記錄遊戲、影視、學習與生活。

    更多 Kurau 的文章