前一篇提到的 CSS 排版方式,這裡針對現下個瀏覽器支援度越來越好的 Flex
或者 會有人說是 Flexbox
,兩者是密切相關的概念,但他們的用途和含義有所不同:
簡述
Flexbox
- 全名: Flexbox(Flexible Box Layout)是一種 CSS 排版模型,用於設計和佈局。
- 功能: 它允許容器內的項目自動調整大小,以填滿可用空間,並在不同方向上對齊(水平或垂直)。
- 屬性: Flexbox 提供了一組屬性來控制容器和項目的排列和對齊方式,包括
display: flex
、flex-direction
、justify-content
、align-items
等。
Flex
- 定義: 在 Flexbox 中,
flex
是一組 CSS 屬性中的一個(或多個)屬性,主要用來定義項目的增長、縮小和基礎大小。 -
屬性:
flex
屬性是flex-grow
、flex-shrink
和flex-basis
的縮寫。它控制單個項目在容器中的彈性行為。例如:
flex: 1 會使項目在可用空間中增長和縮小。
flex: 0 1 100px 表示項目不增長(flex-grow: 0
),可以縮小(flex-shrink: 1
),並且基礎大小為 100 像素(flex-basis: 100px
)。
Flex 各屬性介紹
容器屬性(Flex Container)
這些屬性是用於設置整個彈性容器的行為和佈局。
-
display:設置為
flex
或inline-flex
,將元素設置為彈性容器。flex
: 容器會在新行中顯示,當在 display 屬性宣告flex
,如果沒有設定寬高,彈性容器像 block 一樣佔據了整行。inline-flex
: 容器會在行內顯示,當在 display 屬性宣告inline-flex
,如果沒有設定寬高,可以看到彈性容器像inline-block
一樣被子層彈性項目的尺寸撐開。
Flex12inline-flex12
-
flex-direction:定義主軸的方向(項目排列的方向)。
flex-direction:row;(項目沿主軸從左到右排列『默認值』)123flex-direction:row-reverse;(項目沿主軸從右到左排列)123flex-direction:column;(項目沿主軸從上到下排列)123flex-direction:column-reverse;(項目沿主軸從下到上排列)123 -
flex-wrap:控制項目是否換行。
flex-wrap:nowrap;(所有項目在一行中,可能會縮小以適應容器『默認值』)1234567flex-wrap:wrap;(項目超出容器時換行)1234567flex-wrap:wrap;(項目超出容器時換行,但從底部開始)1234567 -
flex-flow:
flex-direction
和flex-wrap
的縮寫形式,例如row wrap
。
-
justify-content:控制主軸上的項目對齊方式。
justify-content:start; (項目靠左對齊)123justify-content:end;(項目靠右對齊)123justify-content:center;(項目居中對齊)123justify-content:space-between;
(項目之間均勻分配空間,第一個項目在起始位置,最後一個在結束位置)123justify-content:space-around;(項目之間有均勻的間距,項目的兩側也有間距。)123justify-content:space-evenly;(項目之間和邊緣的間距均等)123 -
align-items:控制交叉軸上的項目對齊方式。
align-items:start; (項目靠上對齊)123align-items:end;(項目靠下對齊)123align-items:center;(項目在交叉軸上居中對齊)123align-items:baseline;
(項目根據基線對齊)123align-items:stretch;(項目填滿容器的高度『默認值』)123 -
align-content:控制多行項目在交叉軸上的對齊方式。
align-content:start; (項目靠上對齊)12345align-content:end;(項目靠下對齊)12345align-content:center;(項目在交叉軸上居中對齊)12345align-content:space-between;
(行之間均勻分配空間)12345align-content:space-around;( 行之間有均勻的間距)12345align-content:stretch;(行填滿容器的高度『默認值』)12345
項目屬性(Flex Item)
這些屬性是用於設置彈性容器內部各個項目的行為和佈局。
-
flex-grow:
- 定義項目如何在可用空間中增長。默認值為
0
,表示不增長。如果設為1
,項目會根據容器的剩餘空間增長。
- 定義項目如何在可用空間中增長。默認值為
-
flex-shrink:
- 定義項目如何縮小。默認值為
1
,表示項目會根據容器的大小縮小。如果設為0
,項目不會縮小。
- 定義項目如何縮小。默認值為
-
flex-basis:
- 設定項目的初始大小,默認為
auto
,表示根據項目的內容決定大小。可以設定具體的像素值或百分比。
- 設定項目的初始大小,默認為
-
flex:
-
縮寫形式,結合
flex-grow
、flex-shrink
和flex-basis
。例如,flex: 1
表示項目將增長以填充可用空間。範例1:
父元素寬度『足夠』的情況480px1
- flex-grow: 1;
- flex-shrink: 1;
- flex-basis: 160px;
2
- flex-grow: 2;
- flex-shrink: 2;
- flex-basis: 160px;
父元素寬度『不足』的情況220px1
- flex-grow: 1;
- flex-shrink: 1;
- flex-basis: 160px;
2
- flex-grow: 2;
- flex-shrink: 2;
- flex-basis: 160px;
範例 1 說明:
紅色區塊在父元素寬度『足夠』的情況下,『伸展』的比例只有 1,而藍色則分配到 2,所以藍色總長度會比紅色多;
紅色區塊在父元素寬度『不足』的形況下,『壓縮』的比例只有 1,而藍色則分配到 2,所以藍色的總長度會比紅色少。
範例2:
父元素寬度『足夠』的情況480px1
- flex-grow: 2;
- flex-basis: 160px;
2
- flex-grow: 1;
- flex-shrink: 0;
- flex-basis: 160px;
父元素寬度『不足』的情況220px1
- flex-grow: 2;
- flex-basis: 160px;
2
- flex-grow: 1;
- flex-shrink: 0;
- flex-basis: 160px;
範例 2 說明:
藍色區塊在父元素寬度『足夠』的情況下,「伸展」的比例只有 1,而紅色則分配到 2,所以藍色總長度會比紅色多;
藍色區塊在父元素寬度『不足』的形況下,『壓縮』的比例是 0,所以藍色不會被壓縮,而紅色沒有設定數值,所以『壓縮』的比例是預設的 1。 -
-
align-self: 針對單個項目的自定義對齊方式,可以覆蓋容器的
align-items
設置。align-self
可以個別調整子元素在交錯軸線的位置,屬性與align-items
相同。假如我們已經在父元素上設定align-items
,但要其中一個內容物的位置需要調整成其他對齊方式,這時我們就可以針對該元素設定align-self
來覆寫原本align-items
的屬性。auto
:繼承父元素的 align-items 值(預設)。flex-start
:元素對齊到容器的起始邊。flex-end
:元素對齊到容器的結束邊。center
:元素在容器內垂直居中。baseline
:元素的基線對齊。stretch
:若允許,元素會拉伸以填滿容器。