二分查詢法02:二分查詢法的變種
- flex佈局
- flex容器屬性
- flex-direction [row | row-reverse | column | column-reverse]
- flex-wrap [nowrap | wrap | wrap-reverse]
- flex-flow
- justify-content [flex-start | flex-end | center | space-between | space-around]
- align-items [flex-start | flex-end | center | baseline | stretch]
- align-content [flex-start | flex-end | center | space-between | space-around | stretch]
- 專案/元素的屬性
- flex容器屬性
- 問題和實現
- Links
flex佈局
簡單樣例:
<div class="container"> <div class="div">我是一個div</div> <div class="div">我是一個很多字div</div> <div class="div">我是一個更多字而且第三個div</div> </div> <style> .container{ display: flex; } .div{ border: 1px solid red; flex: 1; } </style>
針對塊元素和行內元素有兩種取值:
.container {
display: flex | inline-flex; //可以有兩種取值
}
flex容器屬性
flex-direction [row | row-reverse | column | column-reverse]
決定主軸的方向(即專案的排列方向)
flex-wrap [nowrap | wrap | wrap-reverse]
決定容器內專案是否可換行;預設情況下,專案都排在主軸線上不換行
nowrap (預設值)不換行,即當主軸尺寸固定時,當空間不足時,專案尺寸會隨之調整而並不會擠到下一行
flex-flow
flex-direction 和 flex-wrap 的簡寫形式,兩個屬性的組合,例如: row nowrap;
justify-content [flex-start | flex-end | center | space-between | space-around]
定義專案在主軸的對齊方式
分別是:(預設值)左對齊,右對齊,居中,兩端對齊(專案間的間隔相等,邊緣無間隔),每個專案兩側的間隔相等(最左和最右邊緣有間隔,專案之間間隔比專案與邊緣的間隔大一倍)
align-items [flex-start | flex-end | center | baseline | stretch]
定義了專案在交叉軸上的對齊方式(不同的專案在大小/交叉軸方向長度不同時的對齊方式)
預設值為 stretch
,即如果專案未設定高度或者設為 auto
,將佔滿整個容器的高度;flex-start
:交叉軸的起點對齊;flex-end
:交叉軸的終點對齊;center
:交叉軸的中點對齊;baseline
: 專案的第一行文字的基線對齊
align-content [flex-start | flex-end | center | space-between | space-around | stretch]
定義多根軸線的對齊方式,如果專案只有一根軸線,那麼該屬性將不起作用
說明:當我們 flex-wrap
設定為 wrap
的時候,容器可能會出現多條軸線,這時候就需要去設定多條軸線之間的對齊方式;以水平主軸為例,並且會換行:
stretch
:平分容器的垂直方向上的空間,如果沒有設定高度將會撐開整個容器;flex-start
:多個主軸線全部在交叉軸上的起點對齊;flex-end
:軸線全部在交叉軸上的終點對齊;center
:軸線全部在交叉軸上的中間對齊;space-between
:軸線兩端對齊,之間的間隔相等,即剩餘空間等分成間隙;space-around
:每個軸線兩側的間隔相等,所以軸線之間的間隔比軸線與邊緣的間隔大一倍圖示
專案/元素的屬性
order屬性
.item {
order: <integer>;
}
定義專案的排列順序
flex-grow
定義專案的放大比例
如果所有專案的flex-grow屬性都為1,則它們將等分剩餘空間(如果有的話);如果一個專案的flex-grow屬性為2,其他專案都為1,則前者佔據的剩餘空間將比其他項多一倍(劃分剩餘空間)
flex-shrink
定義專案的縮小比例
預設值: 1,即如果空間不足,該專案將縮小,負值對該屬性無效
如果所有專案的 flex-shrink 屬性都為 1,當空間不足時,都將等比例縮小。 如果一個專案的 flex-shrink 屬性為 0,其他專案都為 1,則空間不足時,前者不縮小(當空間不足時的縮小比例)
flex-basis
定義在分配多餘空間之前,專案佔據的主軸空間(瀏覽器根據這個屬性,計算主軸是否有多餘空間)
它的預設值為auto,即專案的本來大小,item 的寬高取決於 width 或 height 的值;當主軸為水平方向的時候,當設定了 flex-basis
,專案的寬度設定值會失效,flex-basis
需要跟 flex-grow
和 flex-shrink
配合使用才能發揮效果。(當 flex-basis
值為 0 %
時,是把該專案視為零尺寸的,並且來計算剩餘空間)
flex
flex-grow flex-shrink flex-basis多個屬性的簡寫;預設值0 1 auto
該屬性有兩個快捷值:auto (1 1 auto) 和 none (0 0 auto)
預設值和特殊情況屬性值
點選檢視程式碼
- 當 flex 取值為一個非負數字, 即為flex-grow屬性值,後兩個預設取1和0%:
.item {flex: 1;}
.item {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
}
- 當flex取值為一個長度或百分比,則視為flex-basis值,flex-grow取1,flex-shrink取1:
.item-1 {flex: 0%;}
.item-1 {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
}
.item-2 {flex: 24px;}
.item-2 {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 24px;
}
- 當flex取值為兩個非負數字,則分別視為flex-grow和flex-shrink的值,flex-basis 取0%:
.item {flex: 2 3;}
.item {
flex-grow: 2;
flex-shrink: 3;
flex-basis: 0%;
}
align-self [auto | flex-start | flex-end | center | baseline | stretch]
允許單個專案有與其他專案不一樣的對齊方式
單個專案覆蓋 父元素的align-items
定義的屬性 ,預設值為auto
,表示繼承父元素的 align-items
屬性,如果沒有父元素,則等同於 stretch
這個跟 align-items
屬性時一樣的,只不過 align-self
是對單個專案生效,而 align-items
則是對容器下的所有專案生效的
問題和實現
flex:1
與flex:auto
的區別
flex:1等價於:
flex-grow:1
flex-shrink:1
flex-basis:0% /*視為零尺寸,來計算剩餘空間並放大*/
flex:auto等價於:
flex-grow:0
flex-shrink:1
flex-basis:auto /*分配空間前,初始的專案大小為本身大小*/