具響應式的 Flexbox 排版結合了可換行的容器、靈活的項目尺寸,以及明確的溢出防護措施,因此內容能隨可用空間變動而順利重新排列。 Flexbox 本身不會偵測檢視區。它會依據父元素提供的空間做出反應,因此若要達到響應式結果,通常必須同時設定容器,並仔細檢視子元素的規則。

僅新增 display: flex 並不能讓排版具備響應式效果。包含無法調整尺寸之子元素的單列可能會溢出,而未搭配靈活尺寸的換行則可能造成欄位過窄或寬度不均。請將響應式設計視為換行、空間分配、尺寸限制,以及使用實際內容進行測試的綜合結果。

how to make flexbox responsive
如何讓 Flexbox 具備響應式效果:實用指南

響應式行為源自三個層面

當這些層面相互配合時,Flexbox 便能具備響應式效果:

  • 換行: flex-wrap: wrap 可讓項目在設定的項目無法容納於同一列時形成額外的 Flex 行。這能促成重新排列,但無法決定每個子元素應獲得多少空間。
  • 靈活尺寸: flex-basis、flex-grow 與 flex-shrink 決定子元素如何因應可用空間。如需讓所有項目具有特定且相同的寬度,請參閱如何讓 Flexbox 項目填滿完整寬度。
  • 溢出防護措施: Flex 項目可能具有自動最小尺寸,防止其縮減至小於內容的尺寸。套用 min-width: 0 可移除此下限,但長字詞或媒體仍可能需要適當的換行或溢出規則。

這些層面分別回答不同的問題:項目是否可占據多列、每列如何分配空間,以及當內容抗拒縮減時子元素會如何表現。排版可能只具備其中部分層面,卻仍導致溢出或間距不自然。

讓每個容器屬性各司其職

Flexbox Generator 提供一組 focuses 的容器控制項。這些選項可決定所產生規則所使用的軸線、行 formation、分配方式、對齊方式與間距。

控制項支援的值排版角色
flex-directionrow, row-reverse, column, column-reverse establishes 主軸與項目順序。
flex-wrapnowrap, wrap, wrap-reverse保持單列、允許新列,或反轉各列在交叉軸上的順序。
justify-contentflex-start, flex-end, center, space-between, space-around, space-evenly沿主軸分配項目。
align-itemsstretch, flex-start, flex-end, center, baseline在各 Flex 行內沿交叉軸定位項目。
gap0 至 100 的整數像素設定相鄰項目與 Flex 行之間的間距。

對於一般列,主軸是水平方向,因此 justify-content 會水平分配項目。在欄中,主軸會變成垂直方向,因此同一屬性會垂直分配項目。相較之下,align-items 一律在各列內沿交叉軸運作。MDN 的 Flexbox 基本概念 更詳細地說明了這些軸線與尺寸關係。

建立響應式 Flexbox 模式

  1. 將內容對應至排版。 決定元件應以列或欄起始、卡片或控制項是否應移至新列,以及哪些子元素應擴大。卡片集合通常適合使用換行,而垂直表單可能完全不需要改變方向。

  2. 建立容器規則。 開啟 Flexbox Generator,選擇 flex-direction、flex-wrap、透過 justify-content 設定主軸分配方式,以及透過 align-items 設定交叉軸項目對齊方式。例如,若要建立可換行的卡片列,請選擇 row 與 wrap,再選擇符合預期組合方式的分配與對齊設定。

  3. 設定間距並檢查預覽。 輸入 0 至 100 的整數像素間距。預覽使用 5 個固定的本機項目,且只有在每個欄位都有效時才會更新,讓您能比較換行與對齊效果。這些示範項目不會重現實際介面的尺寸、內容或可用空間。

  4. 產生並複製 CSS。 產生已驗證的 .container 規則,然後複製規則或手動選取可見程式碼。輸出內容一律依固定順序包含 6 個宣告:display: flex 加上 5 個已設定的屬性。若選擇 row 方向、換行、space-between 分配、center 對齊及 16 像素間距,會產生以下宣告組合:

    .container { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 16px; }

  5. 新增子元素規則。 將產生的容器區塊貼入已檢視的樣式表,再定義子元素如何自行調整尺寸。例如,.card { flex: 1 1 15rem; min-width: 0; } 會讓每張卡片擁有靈活的起始尺寸,並允許其在必要時縮小。此基準是起始點,並非保證的斷點,因此請使用實際內容測試結果。

  6. 僅在內容需要時新增窄寬度限制。 如果側邊欄必須轉為堆疊排列,請在自有樣式表中新增媒體查詢或容器查詢,並在經過內容測試的門檻值變更容器方向。如果換行與靈活尺寸已能產生實用結果,額外斷點可能徒增維護負擔。

  7. 發布前進行測試。 使用實際內容、不同容器寬度、瀏覽器縮放比例、書寫模式與相關無障礙設定檢查元件。確認項目在預期位置換行、文字保持可讀、控制項仍可使用,而且不會出現水平溢出。

依內容選擇換行模式

最佳的響應式模式應依循內容的行為,而非依據裝置寬度清單。以不同組合方式使用相同的容器控制項,再新增符合元件用途的子元素規則。

模式容器設定子元素設定響應式結果
卡片集合可換行的列靈活基準與擴大方式隨空間減少而保留較少欄位。
工具列或按鈕群組可換行的列項目保留其偏好寬度控制項移至另一列,而不是發生溢出。
側邊欄與內容列,附加窄寬度覆寫具有適當下限的靈活內容排版可堆疊,而不會困住主要內容。
垂直表單或清單可換行的欄全寬或依內容而定之子元素欄位與動作依可預期的順序堆疊。

換行並非永遠是正確答案。包含 2 個穩定項目的導覽列可能需要維持水平排列,而一組互不相關的卡片則可能適合讓每個項目各自移至獨立的一列。同樣地,justify-content 只會分配位於主軸上的項目,無法建立額外各列或決定子元素寬度。

讓產生的規則維持在其適用範圍內

請將產生的區塊視為安全的容器起始點,而非完整的響應式排版系統。它刻意不會輸出:

  • 諸如 flex 簡寫、flex-basis,或擴大與縮小因子等子元素尺寸規則。
  • 諸如 order、align-content、place-content、尺寸或溢出等額外排版控制項。
  • 諸如媒體查詢、備援方案或供應商前綴等交付功能。

間距欄位僅接受以 10 為基底的整數文字,並將其解讀為 0 至 100(含兩端)的像素。負數、小數、科學記號、單位文字、空值輸入、CSS 標點符號,以及諸如 00 的前導零形式都會遭拒絕。超過 100 的值會回報錯誤,而不會縮減為 100。原始間距輸入限於 32 個 UTF-16 程式碼單位:達到該界限的輸入會被處理,較長的輸入則會失敗且不會截斷。

預覽與複製的宣告會使用相同的已驗證設定,因此兩者不會在未提示的情況下代表不同的設定。編輯選取項目或間距時,會清除先前產生的 CSS、所有驗證錯誤,以及複製確認訊息;再次產生時,會驗證完整的目前狀態。如果非同步剪貼簿複製失敗,完整 CSS 仍會保持可見,以便手動選取。

驗證、預覽算繪、序列化與剪貼簿作業全都在使用中的瀏�器分頁本機執行。此工具不會將設定或產生的 CSS 上傳至 Lizely、建立檔案或遠端樣式表、嵌入框架,也不會執行動態建構的 CSS 字串。

執行最終響應式檢查清單

  • 使用最長且符合實況的標籤、圖片與控制項載入元件。
  • 測試窄、中、寬等容器尺寸,而不是只依賴單一檢視區。
  • 檢查瀏覽器縮放比例與文字放大情況,確認沒有裁切或重疊。
  • 確認換行後的項目仍維持合理的閱讀與鍵盤順序。
  • 確認焦點指標、標籤與控制項名稱保持完整。

響應式 Flexbox 並非單一宣告或生成工具的輸出,而是經過檢視的組合結果:可重新排列的容器、能分配空間的子元素、避免不必要最小尺寸的防護措施,以及在實際內容需要之處加入的限制。