Flex
CSS Flexbox(Flexible Box Layout)是一種排版方式,讓排版、對齊和分配項目之間的空間更有效率。
概念
容器 Container 和子元素 Items
主軸 Main axis 與 交叉軸 Cross axis
主軸是 Flex 容器的主要排列方向,可以是水平或垂直的。交叉軸則是與主軸垂直的排列方向。主軸由 flex-direction 屬性定義,可以是水平或是垂直
主軸對齊和交叉軸對齊 justify-content 屬性控制 Flex 元素在主軸上的對齊方式,align-items 則控制 Flex 元素在交叉軸上的對齊方式
彈性增長和縮小 透過 flex-grow 和 flex-shrink 屬性根據可用空間自動增長或縮小
彈性元素排序
透過 order 屬性重新排列
容器屬性
display
:指定容器的排版類型,可以是 flex、inline-flexflex-direction
:指定主軸的方向,可以是 row(水平,默認值)、row-reverse(水平反向)、column(垂直)或 column-reverse(垂直反向)
flex-wrap
:指定子元素是否換行,可以是 nowrap(不換行,默認值)、wrap(換行)或 wrap-reverse(反向換行)
justify-content
:控制 Flex 元素在主軸上的對齊方式,可以是 flex-start、flex-end、center、space-between(平均分布,首尾元素靠邊)或 space-around(平均分布,首尾元素有空隙)等
align-items
:控制 Flex 元素在交叉軸上的對齊方式,可以是 flex-start、flex-end、center、baseline(按文字基線對齊)或 stretch(拉伸至容器高度)等
align-content
:當有多行 Flex 元素時,控制各行在交叉軸上的對齊方式,可以是 flex-start、flex-end、center、space-between、space-around 或 stretch 等。gap
: 設定子元素之間的間距,以及主軸或交叉軸上的元素間距,可以透過 gap、column-gap 或 row-gap 設定
flex
: flex-grow, flex-shrink 和 flex-basis 可以一起使用,預設為 0 1 auto(等於 initial)。
.flex-item {
flex: <flex-grow> <flex-shrink> <flex-basis>;
}
flex 其他常見的設定及使用情境如下:
flex: auto
等於flex: 1 1 auto
,元素會均等地增長和縮小,並保持其自然的大小(由 flex-basis 決定),通常用於元素需要填滿容器並按比例伸展或縮小的情況flex: none
等於flex: 0 0 auto
,元素不會收縮也不會擴展,它將保持其自然的大小(由 flex-basis 決定)flex: 1
等於flex: 1 1 0%
,元素會在增加的可用空間中均等地增長,並在需要時均等地縮小,以填滿或適應容器flex: 0
- 等於
flex: 0 1 0%
,元素不會增長,但在需要時會縮小以適應容器的空間
子元素屬性
order
: 預設每個子元素的 order 為 0,數值小的元素排在前面。
flex-grow
:指定元素在可用空間中擴展的比例。如果所有子元素都具有相同的 flex-grow 值,它們將等分可用空間。預設為 0 (不會擴展)
flex-shrink
: 指定元素在空間不足時收縮的比例。如果所有子元素都具有相同的 flex-shrink 值,它們將等分可用空間。預設值為 1 。當數值為 0 時,則元素不會收縮。
flex-basis
:指定元素的基本大小,預設值為 auto(基於元素內容,若無內容則基於其寬度、高度),值可以是一個固定的 px,也可以是相對值,如百分比。它確定了元素在可用空間中的起始大小。
align-self
:控制單個子元素的交叉軸對齊方式,可以覆蓋父容器的 align-items 屬性。可用值包括 flex-start、flex-end、center、baseline 和 stretch 等。