用彩色動畫 GIF 大圖解釋彈性盒工作機制

用彩色動畫 GIF 大圖解釋彈性盒工作機制

原文鏈接: medium.freecodecamp.com

彈性盒(Flexbox)承諾要將我們從普通 CSS 的罪惡(比如垂直對齊)之中解救出來。

不錯,彈性盒確實兌現了這一目標。不過,掌握它的新心智模型可能是個挑戰。

所以我們用動畫來看看彈性盒的工作機制,這樣就可以用它來創建更好的佈局。

彈性盒的基本原則是讓佈局變得靈活而直觀。

為實現這個原則,它讓容器自己決定如何均勻分配其子項目 - 包括子項目大小及它們之間的間距。

原則上,這聽起來都不錯。但是我們來看看它實際上看起來是什麼樣的。

本文將深入研究五種最常用的彈性盒屬性。我們將探索它們會做什麼,我們可以如何使用它們,以及它們的結果會實際是什麼樣子。

屬性 #1: display: flex

如下是我們的示例網頁:

用彩色動畫 GIF 大圖解釋彈性盒工作機制

有四個不同大小的彩色 div,被包在一個灰色容器 div 中。眼下,每個 div 默認被設置為 display: block。因此,每個正方形佔一整行寬度。

為了開始用彈性盒,你需要把容器變成一個彈性容器。這輕而易舉:

#container {
display: flex;
}
用彩色動畫 GIF 大圖解釋彈性盒工作機制

變化不大 - 現在 div 在行內顯示,僅此而已。不過,在幕後,你已經做了些很牛的事情了。你給你的正方形加上了彈性上下文

現在你可以開始在該上下文內定位它們,而且遠沒有傳統 CSS 那麼難。

屬性 #2: flex-direction

彈性容器有兩個軸:一個主軸(main axis)和一個側軸(cross axis),默認看起來是這樣的:

用彩色動畫 GIF 大圖解釋彈性盒工作機制

默認情況下,彈性項目是沿著主軸,從左到右排列。這就是為什麼一旦應用了 display: flex,正方形就默認排列到一個水平線上的原因。

不過,Flex-direction 可以讓你旋轉主軸。

#container {
display: flex;
flex-direction: column;
}
用彩色動畫 GIF 大圖解釋彈性盒工作機制

這裡作出了一個重要的區別:flex-direction: column 不會將正方形在側軸上對齊,而是在主軸上對齊。它讓主軸本身從水平變為垂直的。

flex-direction 還有兩個其它選項,即:row-reversecolumn-reverse

用彩色動畫 GIF 大圖解釋彈性盒工作機制

屬性 #3: justify-content

Justify-content 控制如何在主軸上對齊彈性項目。

這裡,你將進一步深入主軸/側軸的區別。首先,回到 flex-direction: row。

#container {
display: flex;
flex-direction: row;
justify-content: flex-start;
}

使用 justify-content 有五個命令可以由你處理:

  1. Flex-start
  2. Flex-end
  3. Center
  4. Space-between
  5. Space-around
用彩色動畫 GIF 大圖解釋彈性盒工作機制

space-around 和 space-between 最不直觀。space-between 是讓每個正方形之間的空間相等,而不是讓正方形與容器之間的空間相等

space-around 在正方形的每一邊上放一個相等的緩衝空間 - 這意味著最外的正方形和容器之間的空間是兩個正方形之間的空間的一半(每個正方形貢獻出一個不重疊的等量邊緣,所以空間加倍)。

最後一點:記住 justify-content 是沿著主軸起作用flex-direction 轉換主軸。這將是很重要的,因為你要移到...

屬性 #4: align-items

如果理解了 justify-content,那麼 align-items 也就輕而易舉了。

justify-content 沿著主軸起作用,而 align-items 是應用於側軸

用彩色動畫 GIF 大圖解釋彈性盒工作機制

現在我們把 flex-direction 重新設置為 row,這樣軸就跟上圖一樣了。

然後,我們深入 align-items 命令。

  1. flex-start
  2. flex-end
  3. center
  4. stretch
  5. baseline

頭三個與 justify-content 一模一樣,所以這裡沒什麼特別的。

不過,後兩個有點不同。

如果設置為 stretch,彈性項目就會佔據全部側軸;如果設置為 baseline,就會沿著段落標記的底部對齊。

用彩色動畫 GIF 大圖解釋彈性盒工作機制

(注意,對於 align-items: stretch,必須將正方向的 height 設置為 auto,否則 height 屬性會覆蓋 stretch 屬性。)

對於 baseline,請注意,如果拿走段落標記,就會對齊到正方形的底部,像這樣:

用彩色動畫 GIF 大圖解釋彈性盒工作機制

為更好演示主軸和側軸,現在我們結合 justify-content 和 align-items,看看兩種不同的 flex-direction 命令下,居中有何不同:

用彩色動畫 GIF 大圖解釋彈性盒工作機制

即使在兩種情況下正方形都能垂直和水平居中,二者也不是一碼事!

屬性 #5: align-self

align-self 允許手動控制某個特殊元素的對齊。

它主要是為一個正方形覆蓋 align-items。所有屬性值與 align-items 都是相同的,不過其默認值是 auto,此時它跟容器的 align-items 值一致。

#container {
align-items: flex-start;
}
.square#one {
align-self: center;
}
// 只有這種正方形居中。

現在我們來看看結果是什麼樣子。會把 align-self 應用到兩個正方形上,而其它的則應用 align-items: center 和 flex-direction: row。

用彩色動畫 GIF 大圖解釋彈性盒工作機制

結論

即使我們只是觸及到了彈性盒的皮毛,這些命令也足以讓你可以處理大多數基礎的對齊 - 以及垂直對齊到核心內容。

如果想看更多的 GIF 彈性盒教程,或者如果本教程對你有幫助,請點擊下面的綠心,或者留下評論。

多謝閱讀!

用彩色動畫 GIF 大圖解釋彈性盒工作機制


分享到:


相關文章: