1. 核心概念(Core Concepts)
  2. 響應式設計(Responsive design)

核心概念(Core Concepts)

響應式設計(Responsive design)

使用響應式通用類別變體來建構適應性使用者介面。

概覽(Overview)

Tailwind 中的每個通用類別都可以在不同的中斷點有條件地套用,這使得在不離開 HTML 的情況下建構複雜的響應式介面變得輕而易舉。

首先,確保你已經在文件的 <head> 中加入了 viewport meta 標籤

index.html
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

然後,要加入一個通用類別但只讓它在特定中斷點生效,你只需要在通用類別前面加上中斷點名稱,後面接著 : 字元:

HTML
<!-- 預設寬度 16,中型螢幕 32,大型螢幕 48 --><img class="w-16 md:w-32 lg:w-48" src="..." />

預設有五個中斷點,靈感來自常見的裝置解析度:

中斷點前綴最小寬度CSS
sm40rem (640px)@media (width >= 40rem) { ... }
md48rem (768px)@media (width >= 48rem) { ... }
lg64rem (1024px)@media (width >= 64rem) { ... }
xl80rem (1280px)@media (width >= 80rem) { ... }
2xl96rem (1536px)@media (width >= 96rem) { ... }

這適用於框架中的每個通用類別,這意味著你可以在給定的中斷點改變任何東西——甚至像字母間距或游標樣式這樣的東西。

這是一個簡單的行銷頁面元件範例,在小螢幕上使用堆疊佈局,在較大螢幕上使用並排佈局:

<div class="mx-auto max-w-md overflow-hidden rounded-xl bg-white shadow-md md:max-w-2xl">  <div class="md:flex">    <div class="md:shrink-0">      <img        class="h-48 w-full object-cover md:h-full md:w-48"        src="/img/building.jpg"        alt="Modern building architecture"      />    </div>    <div class="p-8">      <div class="text-sm font-semibold tracking-wide text-indigo-500 uppercase">Company retreats</div>      <a href="#" class="mt-1 block text-lg leading-tight font-medium text-black hover:underline">        Incredible accommodation for your team      </a>      <p class="mt-2 text-gray-500">        Looking to take your team away on a retreat to enjoy awesome food and take in some sunshine? We have a list of        places to do just that.      </p>    </div>  </div></div>

以下是上述範例的運作方式:

  • 預設情況下,外層 divdisplay: block,但透過加入 md:flex 通用類別,它在中型螢幕及以上會變成 display: flex
  • 當父元素是 flex 容器時,我們想確保圖片永遠不會縮小,所以我們加入了 md:shrink-0 來防止在中型螢幕及以上縮小。技術上我們可以只使用 shrink-0,因為它在較小的螢幕上不會有任何作用,但既然它只在 md 螢幕上有意義,在類別名稱中明確表示是個好主意。
  • 在小螢幕上,圖片預設自動為全寬。在中型螢幕及以上,我們使用 md:h-full md:w-48 將寬度限制為固定尺寸並確保圖片為全高。

我們在這個範例中只使用了一個中斷點,但你可以輕鬆地使用 smlgxl2xl 響應式前綴來自訂這個元件在其他尺寸的樣式。

行動優先的工作方式(Working mobile-first)

Tailwind 使用行動優先的中斷點系統,類似於你可能在其他框架(如 Bootstrap)中習慣的方式。

這意味著沒有前綴的通用類別(如 uppercase)在所有螢幕尺寸上都會生效,而有前綴的通用類別(如 md:uppercase)只在指定的中斷點_及以上_生效。

針對行動螢幕(Targeting mobile screens)

這種方法最常讓人驚訝的地方是,要為行動裝置設定樣式,你需要使用沒有前綴的通用類別版本,而不是 sm: 前綴版本。不要把 sm: 想成「在小螢幕上」,而要想成「在小_中斷點_」。

不要使用 sm: 來針對行動裝置

HTML
<!-- 這只會在 640px 及更寬的螢幕上置中文字,不會在小螢幕上 --><div class="sm:text-center"></div>

使用沒有前綴的通用類別來針對行動裝置,並在較大的中斷點覆寫它們

HTML
<!-- 這會在行動裝置上置中文字,並在 640px 及更寬的螢幕上靠左對齊 --><div class="text-center sm:text-left"></div>

因此,通常一個好主意是先實作設計的行動版佈局,然後再加入對 sm 螢幕有意義的變更,接著是 md 螢幕,以此類推。

針對中斷點範圍(Targeting a breakpoint range)

預設情況下,像 md:flex 這樣的規則套用的樣式會在該中斷點生效,並在更大的中斷點保持套用。

如果你想讓通用類別_只_在特定中斷點範圍內生效,請將響應式變體(如 md)與 max-* 變體堆疊,將該樣式限制在特定範圍內:

HTML
<div class="md:max-xl:flex">  <!-- ... --></div>

Tailwind 為每個中斷點產生對應的 max-* 變體,所以開箱即用的變體如下:

變體媒體查詢
max-sm@media (width < 40rem) { ... }
max-md@media (width < 48rem) { ... }
max-lg@media (width < 64rem) { ... }
max-xl@media (width < 80rem) { ... }
max-2xl@media (width < 96rem) { ... }

針對單一中斷點(Targeting a single breakpoint)

要針對單一中斷點,請將響應式變體(如 md)與下一個中斷點的 max-* 變體堆疊,來針對該中斷點的範圍:

HTML
<div class="md:max-lg:flex">  <!-- ... --></div>

閱讀針對中斷點範圍了解更多。

使用自訂中斷點(Using custom breakpoints)

自訂你的主題(Customizing your theme)

使用 --breakpoint-* 主題變數來自訂你的中斷點:

app.css
@import "tailwindcss";@theme {  --breakpoint-xs: 30rem;  --breakpoint-2xl: 100rem;  --breakpoint-3xl: 120rem;}

這會將 2xl 中斷點更新為使用 100rem 而不是預設的 96rem,並建立新的 xs3xl 中斷點,可以在你的標記中使用:

HTML
<div class="grid xs:grid-cols-2 3xl:grid-cols-6">  <!-- ... --></div>

請注意,始終使用相同的單位來定義中斷點很重要,否則產生的通用類別可能會以意外的順序排序,導致中斷點類別以意外的方式互相覆寫。

Tailwind 對預設中斷點使用 rem,所以如果你要在預設值之外新增額外的中斷點,請確保也使用 rem

主題文件中了解更多關於自訂主題的資訊。

移除預設中斷點(Removing default breakpoints)

要移除預設中斷點,請將其值重設為 initial 關鍵字:

app.css
@import "tailwindcss";@theme {  --breakpoint-2xl: initial;}

你也可以使用 --breakpoint-*: initial 重設所有預設中斷點,然後從頭定義所有中斷點:

app.css
@import "tailwindcss";@theme {  --breakpoint-*: initial;  --breakpoint-tablet: 40rem;  --breakpoint-laptop: 64rem;  --breakpoint-desktop: 80rem;}

主題文件中了解更多關於移除預設主題值的資訊。

使用任意值(Using arbitrary values)

如果你需要使用一次性的中斷點,而這個中斷點不適合包含在主題中,請使用 minmax 變體,使用任意值即時產生自訂中斷點。

<div class="max-[600px]:bg-sky-300 min-[320px]:text-center">  <!-- ... --></div>

任意值文件中了解更多關於任意值支援的資訊。

容器查詢(Container queries)

什麼是容器查詢?(What are container queries?)

容器查詢是一種現代 CSS 功能,讓你可以根據父元素的大小而不是整個視窗的大小來設定樣式。它們讓你可以建構更具可攜性和可重複使用的元件,因為它們可以根據該元件實際可用的空間來改變。

基本範例(Basic example)

使用 @container 類別將元素標記為容器,然後使用像 @sm@md 這樣的變體,根據容器的大小來設定子元素的樣式:

HTML
<div class="@container">  <div class="flex flex-col @md:flex-row">    <!-- ... -->  </div></div>

就像中斷點變體一樣,Tailwind CSS 中的容器查詢是行動優先的,會在目標容器大小及以上套用。

最大寬度容器查詢(Max-width container queries)

使用像 @max-sm@max-md 這樣的變體,在特定容器大小以下套用樣式:

HTML
<div class="@container">  <div class="flex flex-row @max-md:flex-col">    <!-- ... -->  </div></div>

容器查詢範圍(Container query ranges)

將一般的容器查詢變體與最大寬度容器查詢變體堆疊,以針對特定範圍:

HTML
<div class="@container">  <div class="flex flex-row @sm:@max-md:flex-col">    <!-- ... -->  </div></div>

具名容器(Named containers)

對於使用多個巢狀容器的複雜設計,你可以使用 @container/{name} 命名容器,並使用像 @sm/{name}@md/{name} 這樣的變體來針對特定容器:

HTML
<div class="@container/main">  <!-- ... -->  <div class="flex flex-row @sm/main:flex-col">    <!-- ... -->  </div></div>

這使得可以根據遠處容器的大小來設定樣式,而不僅僅是最近的容器。

使用自訂容器大小(Using custom container sizes)

使用 --container-* 主題變數來自訂你的容器大小:

app.css
@import "tailwindcss";@theme {  --container-8xl: 96rem;}

這會新增一個 8xl 容器查詢變體,可以在你的標記中使用:

HTML
<div class="@container">  <div class="flex flex-col @8xl:flex-row">    <!-- ... -->  </div></div>

主題文件中了解更多關於自訂主題的資訊。

使用任意值(Using arbitrary values)

對於不想加入主題的一次性容器查詢大小,使用像 @min-[475px]@max-[960px] 這樣的變體:

HTML
<div class="@container">  <div class="flex flex-col @min-[475px]:flex-row">    <!-- ... -->  </div></div>

使用容器查詢單位(Using container query units)

在其他通用類別中使用容器查詢長度單位(如 cqw)作為任意值來參照容器大小:

HTML
<div class="@container">  <div class="w-[50cqw]">    <!-- ... -->  </div></div>

容器大小參考(Container size reference)

預設情況下,Tailwind 包含從 16rem (256px) 到 80rem (1280px) 的容器大小:

變體最小寬度CSS
@3xs16rem (256px)@container (width >= 16rem) { … }
@2xs18rem (288px)@container (width >= 18rem) { … }
@xs20rem (320px)@container (width >= 20rem) { … }
@sm24rem (384px)@container (width >= 24rem) { … }
@md28rem (448px)@container (width >= 28rem) { … }
@lg32rem (512px)@container (width >= 32rem) { … }
@xl36rem (576px)@container (width >= 36rem) { … }
@2xl42rem (672px)@container (width >= 42rem) { … }
@3xl48rem (768px)@container (width >= 48rem) { … }
@4xl56rem (896px)@container (width >= 56rem) { … }
@5xl64rem (1024px)@container (width >= 64rem) { … }
@6xl72rem (1152px)@container (width >= 72rem) { … }
@7xl80rem (1280px)@container (width >= 80rem) { … }
Copyright © 2026 Tailwind Labs Inc.·商標政策(Brand)