justify-content vs align-content,Flexbox 的垂直與水平對齊方式

selective focus photography of Crayola crayons

CSS Flexbox,是一種用於在網頁上創建靈活布局的 CSS3 布局模型。它允許容器內的子元素能夠在需要時伸縮,以適應不同的顯示空間,其中最常使用的屬性就是 justify-content 和 align-content。

什麼是主軸(Main Axis)和交叉軸(Cross Axis)

在 Flexbox 布局中,主軸(Main Axis)和交叉軸(Cross Axis)是兩個關鍵概念,用來描述 Flexbox 內部項目的排列方式。理解這兩個軸線對於掌握對齊規則非常重要,因為 Flexbox 項目的排列會依據軸的走向,而有不同的方向效果。

Pasted image 20231123164457.png
img src: https://css-tricks.com/snippets/css/a-guide-to-flexbox/

主軸(Main Axis)

主軸是 Flexbox 中項目排列的主要方向。在 Flexbox 中,你可以通過 flex-direction 屬性來設置主軸的方向。

方向選擇:

flex-direction: row 時,主軸沿水平方向,從左到右。

flex-direction: row-reverse 時,主軸仍然是水平的,但方向從右到左。

flex-direction: column 時,主軸變為垂直方向,從上到下。

flex-direction: column-reverse 時,主軸仍為垂直方向,但方向從下到上。

交叉軸(Cross Axis)

交叉軸一定垂直於主軸。

方向選擇:

如果主軸是水平的(flex-direction: rowrow-reverse),交叉軸則是垂直的。

如果主軸是垂直的(flex-direction:columncolumn-reverse),交叉軸則是水平的。

Flexbox 中的 Justify-Content 與 Align-Content 比較

在 CSS Flexbox 布局中,justify-contentalign-content 是兩個核心屬性,用於調整 Flexbox 內項目的對齊和分布。

Justify-Content

justify-content 屬性用於沿著 Flexbox 的主軸對齊項目。主軸的方向由 flex-direction 屬性決定。當我們使用 justify-content 時,主要是針對主軸進行調整它包含了多種值,例如:

flex-start

使項目靠近主軸的起始端

flex-end

使項目靠近主軸的終端

center

在主軸中心對齊項目

space-betweenspace-aroundspace-evenly

則分別提供了不同的項目間距分布方式。

Align-Content

align-content 屬性則是用於在 Flexbox 的交叉軸上對齊容器,且僅當容器為多行時(即 flex-wrap 屬性為 wrapwrap-reverse)才有效。

這個屬性不是對單個項目進行操作,而是針對整個行的對齊方式。例如,

flex-start

使行靠近交叉軸的起始端

flex-end

靠近終端

center

在交叉軸中心對齊。

space-betweenspace-aroundstretch

則影響行間的分布和拉伸。

主要差異總結

對齊軸線

  • justify-content 在主軸上進行操作。
  • align-content 在交叉軸上進行操作。

適用情況

  • justify-content 影響容器內的個別項目。
  • align-content 影響多行 Flexbox 中的整行。

有效條件

  • justify-content 適用於單行和多行容器。
  • align-content 需要多行(即設定了 flex-wrap: wrap)才有效果。

布局影響

  • justify-content 決定項目在主軸上的間距和對齊方式。
  • align-content 決定多行在交叉軸上的分布和間距。

程式範例(主軸互換)

.flex-container {
    display: flex;
    flex-direction: column;
    justify-content: center; /* 影響 main axis 項目 */
    align-content: center; /* 影響 cross axis 項目分布 */
}

在這個例子中,我們把 flex-direction 改為 column,所以主軸和交叉軸會互換,結果一樣都是置中,但排列卻是不同的方向。

更多參考教學:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *