flex 佈局
- 參考地址 連結
- layout(網頁佈局)是 css 的一個重點應用
- 傳統的解決方案,基於盒裝模型,依賴display 屬性 + position屬性 + floaa屬性。對於特殊佈局非常不方便(比如垂直居中)
- flex佈局可以簡便,完整,響應式地實現各種頁面佈局,目前已得到所有瀏覽器的支援。
flex佈局概念
- flex 是 Flexible Box 的縮寫,意為"彈性佈局",用來為盒裝模型提供最大的靈活性。
- 設為 flex 佈局以後,子元素的float,clear和vertical-align屬性將失效。
用法:
.box{
//容器使用
display:flex;
//行內元素使用
display:inline-flex;
}
複製程式碼
- 採用flex佈局的元素,稱為flex容器,它的所有子元素自動成為容器成員,稱為flex專案。
容器預設存在兩根軸:水平的主軸和垂直的交叉軸。株洲開始的位置叫做 main start,結束位置叫做 main end;交叉軸開始的位置叫做 cross start,結束的位置叫做 cross end。專案預設沿主軸排列,單個專案佔據的主軸空間叫做 main size,佔據交叉空間叫做 cross size
容器的屬性
- flex-direction
- 決定主軸的方向
.box { flex-direction: row | row-reverse | column | column-reverse; } 複製程式碼
-
flex-warp
- 如果一條軸線拍不下,如何換行
.box{ //nowrap(預設,不換行) wrap 換行,第一行在上方 warp-reverse 換行,第一行在下方 flex-wrap: nowrap | wrap | wrap-reverse; } 複製程式碼
-
flex-flow
- 是 flex-direction + flex-warp 屬性的簡寫形式,預設為 row nowarp
.box { flex-flow: <flex-direction> || <flex-wrap>; } 複製程式碼
-
justify-content
- 定義了專案在主軸上的對齊方式
.box { //flex-start 左對齊(預設值) //flex-end 右對齊 //center 居中 //space-between 兩端對齊,專案之間的間隔都相等 //space-around 每個專案兩側的間隔相等。專案之間的間隔比專案與邊框的間隔大一倍 justify-content: flex-start | flex-end | center | space-between | space-around; } 複製程式碼
-
align-items
- 定義專案在交叉軸上如何對其
.box { //flex-start 交叉軸的起點對齊 //flex-end 交叉軸的終點對齊 //center 交叉軸的中點對齊 //baseline 專案的第一行文字的基線對齊 //stretch(預設值) 如果專案未設定高度或設為auto,將佔滿整個容器的高度 align-items: flex-start | flex-end | center | baseline | stretch; } 複製程式碼
-
align-content
- 定義了多跟軸線的對齊方式。若專案只有一根軸線,該屬性不起作用
.box { //flex-start 與交叉軸的起點對齊 //flex-end 與交叉軸的終點對齊 //center 與交叉軸的中點對齊 //space-between 與交叉軸兩端對齊,軸線之間的間隔平均分佈 //space-around 每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍 //stretch(預設值) 軸線佔滿整個交叉軸 align-content: flex-start | flex-end | center | space-between | space-around | stretch; } 複製程式碼
專案的屬性
-
order
- 定義專案排序規則,數值越小,排序越靠前,預設為0
.item { order: <integer>; } 複製程式碼
-
flex-grow
- 定義專案的放大比例,預設為0,即存在剩餘空間也不放大。根據flex-grow值的佔比分剩餘空間
.item { flex-grow: <number>; /* default 0 */ } 複製程式碼
-
flex-shrink
- 定義了專案的縮小比例,預設為1,即如果空間不足,該專案將縮小,若為0,則當專案空間不足時不縮小
.item { flex-shrink: <number>; /* default 1 */ } 複製程式碼
-
flex-basis
- 定義了在分配多餘空間之前,專案佔據的主軸空間(main size)。瀏覽器根據這個屬性,計算主軸是否有多餘空間。它的預設值為auto,即專案的本來大小。可以設定類似於width的(px),則專案將佔據固定空間
.item { flex-basis: <length> | auto; /* default auto */ } 複製程式碼
-
flex
- flex屬性是flex-grow, flex-shrink 和 flex-basis的簡寫,預設值為0 1 auto。後兩個屬性可選
- 該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)【建議優先使用
.item { flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] } 複製程式碼
-
align-self
- align-self屬性允許單個專案有與其他專案不一樣的對齊方式,可覆蓋align-items屬性。預設值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,則等同於stretch。
- 該屬性可能取6個值,除了auto,其他都與align-items屬性完全一致。
.item { align-self: auto | flex-start | flex-end | center | baseline | stretch; } 複製程式碼