CSS彈性盒子
阿新 • • 發佈:2021-08-09
CSS彈性盒子
介紹
在響應式 Web 設計中,UI 佈局必須適配不同尺寸的裝置。
CSS3 引入了 Flexible Box,簡稱 flexbox(彈性盒子),它特別適合用來建立彈性的頁面佈局。
彈性佈局以一種可預見的方式排列元素,使其適用於不同尺寸的裝置。
使用說明
在一個元素的 CSS 中新增
display: flex;
該元素會變為flex容器,預設它的子元素會從左到右逐個排列,把flex容器設為一個列,它的子元素會從上到下逐個排列。子元素排列的方向被稱為 main axis(主軸)。與主軸垂直的叫做 cross axis(交叉軸)。行的交叉軸是垂直的,列的交叉軸是水平的。
父元素屬性
下面屬性在父元素中設定,用於設定整個CSS彈性盒子的樣式。
flex-direction: row;
屬性可以設定子元素的排列方式,預設值是row
。其他可選值包括:column
,row-reverse
和column-reverse
。justify-content: flex-start
可以更改 flex 子元素在主軸排列方式。center
: flex 子元素排列在 flex 容器中間。flex-start
:從 flex 容器的前端開始排列專案。對行來說是把專案都靠左放,對於列是把專案都靠頂部放。flex-end
:從 flex 容器的後端開始排列專案。對行來說是把專案都靠右放,對於列是把專案都靠底部放。space-between
:專案間保留一定間距地在主軸排列。第一個和最後一個專案會被擠到容器邊沿。例如,在行中第一個專案會緊貼著容器左側,最後一個專案會緊貼著容器右側,然後其他專案均勻排布。space-around
:與space-between
相似,但頭尾兩個專案不會緊貼容器邊緣,空間會均勻分佈在所有專案兩邊。
align-items: stretch
屬性,可以用於在交叉軸調整 flex 子元素。對於行,它規定了專案在容器中應該靠上還是靠下,而對於列,就是靠左或靠右。flex-start
:從 flex 容器的前端開始排列專案。對行來說是把專案都靠頂部放,對於列是把專案都靠左放。flex-end
center
:把專案的位置調整到中間。對於行,垂直居中(專案上下方空間相等)。對於列,水平居中(專案左右方空間相等)。stretch
:拉伸專案,填滿 flex 容器。例如,排成行的專案從容器頂部拉伸到底部。baseline
:基線對齊地排列。基線是字型相關的概念,可以認為字型坐落在基線上。
flex-wrap: nowrap
屬性可以使專案換行。這意味著多出來的專案會被移到新的行或列。換行發生的斷點由專案和容器的大小決定。換行方向的可選值有這些:nowrap
:預設值,不換行。wrap
:行從上到下排,列從左到右排。wrap-reverse
:行從下到上排,列從右到左排。
子元素屬性
下面屬性在子元素中設定,用於設定CSS彈性盒子中指定某個盒子的樣式。
flex-shrink
屬性。使用之後,如果 flex 容器太小,該專案會自動縮小。當容器的寬度小於裡面所有專案的寬度,專案就會自動壓縮。接受number
型別的值。數值越大,與其他專案相比會被壓縮得更厲害。例如,如果一個專案的flex-shrink
為 1 ,另一個專案flex-shrink
為 3,那麼 3 的那個與另一個相比會受到 3 倍壓縮。flex-grow
與flex-shrink
相對。flex-shrink
會在容器太小時對元素作出調整。相應地,flex-grow
會在容器太大時對元素作出調整。如果一個專案flex-grow
屬性的值為 1,另一個flex-grow
為 3,那麼 3 的會比 1 的擴大三倍。flex-basis
屬性指定了專案在 CSS 進行flex-shrink
或flex-grow
調整前的初始大小。flex-basis
屬性的單位與其他 size 屬性一致(px、em、%等)。如果值為auto
,專案的大小依賴於自身內容- 上面幾個 flex 屬性有一個簡寫方式。
flex-grow
、flex-shrink
和flex-basis
屬性可以在flex中一同設定。例如,flex: 1 0 10px;
會把專案屬性設為flex-grow: 1; flex-shrink: 0; flex-basis: 10px;
。屬性的預設設定是flex: 0 1 auto;
。 order
屬性告訴 CSS flex 容器裡專案的順序。預設情況下,專案排列順序與源 HTML 檔案中順序相同。這個屬性接受數字作為引數,可以使用負數。align-self
屬性允許你調整每個元素自己的對齊方式,而不是一次性設定全部專案。因為float
、clear
和vertical-align
等調整使用的屬性都不能應用在 flex 子元素,所以這個屬性顯得十分有用。align-self
的允許值與align-items
一樣,並且它會覆蓋align-items
的值。