開發者工具

Flexbox 產生器

設定屬性,並以白話文閱讀它們實際的作用。

Flexbox 產生器 在您的裝置上執行
  • 在您的瀏覽器中執行 — 您的文字絕不會傳送到任何地方
  • 免註冊、無額度限制,可隨您高興使用多少次

運作方式

Flexbox 並不複雜,但有一件事幾乎讓每個人中招:justify-content 與 align-items 並不代表水平與垂直。它們代表沿著方向與橫跨方向,而方向是由您設定的。

陷阱,直接說明

在 flex-direction: row 時,justify-content 作用於水平方向,align-items 作用於垂直方向。切換為 column 後,兩者完全對調。花在 flexbox 上的每一個小時,基本上都耗在這件事。下方的說明會隨著您更改方向而更新,讓這種關係看得見,而不是靠死記。

主軸與交叉軸

主軸是項目沿著排列的軸,由 flex-direction 設定。交叉軸與它垂直。justify-content 沿主軸分配空間;align-items 在交叉軸上安置項目。一旦記住這兩個名稱,其餘就迎刃而解。

gap,以及它為何取代了 margin

gap 會在項目之間留出空間,而不會在第一個與最後一個的外側增加,這正是 margin 做不好的地方,人們過去得用 :last-child 的小技巧來修正。目前每個瀏覽器都支援它,已經沒有理由避開它。

nowrap 代表縮小,而不是溢出

預設是 nowrap,項目會縮到小於其自然大小以便容納,而不是移到新的一行。這就是文字有時會在 flex 列中意外被擠壓的原因。設定 wrap 可讓項目改為往下移;在子元素上設定 min-width: 0,則能阻止它縮到小於其內容。

兩個方向都置中

justify-content: center 搭配 align-items: center,不論 flex-direction 為何,都能讓項目在兩個方向置中,這是唯一值得直接背起來的組合。

常見問題

Flexbox 產生器:常見問題

為什麼 align-items 會讓東西水平移動?

因為 flex-direction 是 column。這兩個屬性遵循的是方向,而不是螢幕。

主軸與交叉軸有什麼差別?

主軸是項目排列的方向,由 flex-direction 設定。交叉軸則與它垂直。

如何讓東西在兩個方向都置中?

同時使用 justify-content: center 與 align-items: center。

為什麼我的文字被擠壓?

預設的 nowrap 會縮小項目以符合空間。請設定 flex-wrap: wrap,或在子元素上設定 min-width: 0。

可以在 flexbox 中使用 gap 嗎?

可以,目前每個瀏覽器都支援。它比 margin 更好,因為不會在兩端多出空間。