Tailwind CSS v4
這項技能涵蓋 https://tailwindcss.com/docs 文件中的 Tailwind CSS v4.x 版本。v4 是在 CSS 中設定,而非 JavaScript,且許多 v3 的類別名稱與預設值已變更。本技能整理出與過往習慣不同的地方:CSS 優先的設定方式、出乎意料的預設值、重新命名的工具類別,以及文件推薦的模式。參考檔案中的每個說法結尾都會標註其來源頁面。
如何導覽
- 閱讀以下規則。它們會捕捉 v3 中最常於 v4 失效的習慣。
- 從結尾的表格中,開啟與任務相符的參考檔案。
- 當專案中有
tailwind.config.js、@tailwind指令或 v3 類別名稱,或正在審查可能帶有 v3 習慣的程式碼時,請先閱讀references/upgrade-from-v3.md。預設的遷移路徑是在新分支執行npx @tailwindcss/upgrade,然後審查其差異並在瀏覽器中測試。請參閱 https://tailwindcss.com/docs/upgrade-guide#using-the-upgrade-tool
快速入門 (CSS 優先, Vite)
npm install tailwindcss @tailwindcss/vite
// vite.config.ts
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({ plugins: [tailwindcss()] })
/* app.css */
@import "tailwindcss";
@theme {
--color-midnight: #121063;
--font-display: "Oswald", sans-serif;
}
@custom-variant dark (&:where(.dark, .dark *));
- 整個設定包含一個套件、一個插件與一個
@import "tailwindcss";。安裝步驟不需要tailwind.config.js或content陣列。https://tailwindcss.com/docs/installation/using-vite - Tailwind 會自行掃描原始碼檔案。
.gitignore、node_modules、CSS 檔案與鎖定檔案中的內容會被略過。https://tailwindcss.com/docs/detecting-classes-in-source-files#which-files-are-scanned - Next.js、Angular 與其他非 Vite 的 bundler 應改用 PostCSS 插件:
npm install tailwindcss @tailwindcss/postcss postcss,然後使用plugins: { "@tailwindcss/postcss": {} }。https://tailwindcss.com/docs/installation/using-postcss - 字型 URL 的
@import(如 Google Fonts)應放在@import "tailwindcss"之上,然後在@theme中宣告字體系列。https://tailwindcss.com/docs/font-family#customizing-your-theme @theme變數會建立工具類別:--color-midnight會產生bg-midnight、text-midnight、fill-midnight,而--font-display會產生font-display。https://tailwindcss.com/docs/theme#what-are-theme-variables
最重要的規則
設定與配置
- PostCSS 插件是
@tailwindcss/postcss,不是tailwindcss。不需要添加autoprefixer或postcss-import:匯入與瀏覽器前綴已內建。https://tailwindcss.com/docs/upgrade-guide#using-postcss - 在 Vite 配置中,框架指南會將
tailwindcss()放在plugins陣列的第一個,位於框架插件(如 React Router、SvelteKit、SolidJS、Qwik)之前。文件並未規定順序要求。https://tailwindcss.com/docs/installation/framework-guides/react-router https://tailwindcss.com/docs/installation/framework-guides/sveltekit - 在 CSS 中使用
@theme進行自訂。JavaScript 配置不再被自動偵測,只能透過@config "../../tailwind.config.js";載入,且不支援corePlugins、safelist或separator。https://tailwindcss.com/docs/upgrade-guide#using-a-javascript-config-file - 使用
@source inline("{hover:,}bg-red-{50,{100..900..100},950}");進行 safelist。https://tailwindcss.com/docs/detecting-classes-in-source-files#safelisting-specific-utilities node_modules中使用 Tailwind 建置的函式庫不會被掃描:請加上@source "../node_modules/@acmecorp/ui-lib";(路徑相對於樣式表)。https://tailwindcss.com/docs/detecting-classes-in-source-files#explicitly-registering-sources- 永遠不要動態組合類別名稱(如
`bg-${color}-600`)。應將值對應到完整的類別字串。https://tailwindcss.com/docs/detecting-classes-in-source-files#dynamic-class-names - Vue、Svelte 或 Astro 的
<style>區塊以及 CSS modules 是分開編譯的。在其中的@apply之前,請加上@reference "../app.css";,或改用var(--color-blue-500)。https://tailwindcss.com/docs/compatibility#explicit-context-sharing https://tailwindcss.com/docs/compatibility#vue-svelte-and-astro - Tailwind v4 不設計與 Sass、Less 或 Stylus 等 CSS 預處理器一起使用,因此它們不能用於樣式表或 Vue、Svelte、Astro 的
<style>區塊。https://tailwindcss.com/docs/compatibility#sass-less-and-stylus - v4 需要 Safari 16.4+、Chrome 111+、Firefox 128+。若需支援較舊瀏覽器,請繼續使用 v3.4。https://tailwindcss.com/docs/upgrade-guide#browser-requirements
主題與自訂 CSS
- 當主題變數參考另一個變數時,請撰寫
@theme inline { --font-sans: var(--font-inter); },否則變數值會在--font-sans被定義的地方解析。https://tailwindcss.com/docs/theme#referencing-other-variables - 使用
--color-*: initial;移除預設命名空間,使用--*: initial;移除整個主題。https://tailwindcss.com/docs/theme#overriding-the-default-theme - 使用
@utility name { ... }宣告自訂工具類別,而非@layer utilities,這樣變體才能作用於其上。https://tailwindcss.com/docs/upgrade-guide#adding-custom-utilities - 在自訂 CSS 與 JavaScript 中,使用 CSS 變數(
var(--color-red-500))來讀取主題值,而非theme(colors.red.500)或resolveConfig。https://tailwindcss.com/docs/upgrade-guide#theme-values-in-javascript - 所有斷點應使用相同的單位(如預設的
rem),否則斷點會互相覆蓋。https://tailwindcss.com/docs/responsive-design#customizing-your-theme
類別語法
- CSS 變數速記使用括號:
bg-(--brand-color),而非bg-[--brand-color]。https://tailwindcss.com/docs/upgrade-guide#variables-in-arbitrary-values text-(--my-var)可能有歧義(是字型大小還是顏色),因此請加上類型提示:text-(length:--my-var)或text-(color:--my-var)。同樣的提示也適用於font-(family-name:--f)、border-(length:--w)、bg-(image:--img)與shadow-(color:--c)。https://tailwindcss.com/docs/adding-custom-styles#resolving-ambiguities https://tailwindcss.com/docs/font-family https://tailwindcss.com/docs/border-width https://tailwindcss.com/docs/background-image https://tailwindcss.com/docs/box-shadow!important修飾符放在結尾:bg-red-500!。https://tailwindcss.com/docs/upgrade-guide#the-important-modifier- 堆疊的變體從左到右套用:
*:first:pt-0,而非first:*:pt-0。https://tailwindcss.com/docs/upgrade-guide#variant-stacking-order - 無前綴的類別會套用至所有尺寸。
sm:不代表行動裝置:請撰寫text-center sm:text-left。https://tailwindcss.com/docs/responsive-design#targeting-mobile-screens hover:僅在可懸停的裝置上套用(@media (hover: hover))。請將懸停視為一種增強功能。https://tailwindcss.com/docs/upgrade-guide#hover-styles-on-mobile
預設值變更
- 邊框與間隔顏色的預設值改為
currentColor:務必使用border設定顏色。https://tailwindcss.com/docs/upgrade-guide#default-border-color ring現在是 1px 的currentColor。若要達到 v3 的外觀,請使用ring-3 ring-blue-500。https://tailwindcss.com/docs/upgrade-guide#default-ring-width-and-color- 隱藏焦點外框請使用
outline-hidden(在強制色彩模式下會保留):v3 的focus:outline-none改為focus:outline-hidden。outline-none現在會完全移除外框。https://tailwindcss.com/docs/upgrade-guide#renamed-outline-utility - 比例尺已調整:v3 的
shadow-sm、rounded-sm、blur-sm現在是-xs,而 v3 不帶後綴的shadow、rounded、blur現在是-sm。https://tailwindcss.com/docs/upgrade-guide#updated-shadow-radius-and-blur-scales - 漸層使用
bg-linear-to-r,加上bg-radial與bg-conic-<angle>。https://tailwindcss.com/docs/background-image#adding-a-linear-gradient container不再自動置中或加上內距:請撰寫container mx-auto px-4。https://tailwindcss.com/docs/max-width#using-breakpoints-container- 對於網格、包裝佈局或自訂順序的子元素,請使用
gap取代space-x-*與space-y-*。https://tailwindcss.com/docs/margin#limitations - 按鈕現在預設使用
cursor: default。https://tailwindcss.com/docs/upgrade-guide#buttons-use-the-default-cursor - 佔位符使用目前文字顏色 50% 的不透明度。https://tailwindcss.com/docs/upgrade-guide#new-default-placeholder-color
- 顯示類別不再覆蓋
hidden屬性:若要顯示元素,請移除hidden。https://tailwindcss.com/docs/upgrade-guide#hidden-attribute-takes-priority
使用 class 的深色模式
@import "tailwindcss";
@custom-variant dark (&:where(.dark, .dark *));
// 內嵌在 <head> 中,在頁面渲染之前執行
document.documentElement.classList.toggle(
"dark",
localStorage.theme === "dark" ||
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches),
);
設定 localStorage.theme = "dark" 或 "light",以及使用 localStorage.removeItem("theme") 來跟隨系統設定。https://tailwindcss.com/docs/dark-mode#with-system-theme-support
參考檔案
| 檔案 | 何時閱讀它 |
|---|---|
| references/installation-and-frameworks.md | 安裝 Tailwind、選擇 Vite、PostCSS 或 CLI、框架特定步驟、CSS modules、編輯器工具 |
| references/upgrade-from-v3.md | 遷移 v3 專案、審查帶有 v3 類別名稱或配置的程式碼 |
| references/utilities-and-variants.md | 撰寫類別:任意值、衝突、狀態變體、group 與 peer、回應式、容器查詢、深色模式 |
| references/theme-and-colors.md | 新增或覆蓋顏色、字型、斷點、間距、動畫、主題命名空間 |
| references/custom-styles.md | 基礎樣式、Preflight、元件類別、@utility、功能性工具類別、@custom-variant、@variant |
| references/directives-and-source-detection.md | @apply、@reference、--alpha()、--spacing()、@config、@plugin、@source、匯入選項(前綴、important、來源) |
| references/layout-flexbox-grid.md | 顯示、定位、inset、z-index、欄位、flex、網格、對齊與 -safe 對齊 |
| references/spacing-and-sizing.md | 內距、外距、space、寬度、高度、size、container 比例、視口單位、邏輯尺寸 |
| references/typography.md | 字型、字型大小與行高、字母間距、文字環繞、溢出換行、文字修飾、內容 |
| references/backgrounds-and-borders.md | 漸層、背景圖片、大小與位置、邊框半徑、邊框寬度與顏色、外框 |
| references/effects-and-filters.md | 陰影、環、文字陰影、不透明度、混合模式、遮罩、濾鏡與背景濾鏡 |
| references/transitions-transforms-tables.md | 轉場、離散轉場、動畫、旋轉、縮放、位移、3D、縮放、表格 |
| references/interactivity-and-svg.md | 色彩模式、欄位尺寸、滾動條、滾動吸附、游標、will-change、SVG 填充與描邊、強制色彩模式 |