css | flex

首先明確一點是, flex 是 flex-grow、flex-shrink、flex-basis的縮寫。故其取值可以考慮以下情況:

flex 的默認值是以上三個屬性值的組合。假設以上三個屬性同樣取默認值,則 flex 的默認值是 0 1 auto。同理,如下是等同的:

.item {flex: 2333 3222 234px;}

.item {

flex-grow: 2333;

flex-shrink: 3222;

flex-basis: 234px;

}

當 flex 取值為 none,則計算值為 0 0 auto,如下是等同的:

.item {flex: none;}

.item {

flex-grow: 0;

flex-shrink: 0;

flex-basis: auto;

}

當 flex 取值為 auto,則計算值為 1 1 auto,如下是等同的:

.item {flex: auto;}

.item {

flex-grow: 1;

flex-shrink: 1;

flex-basis: auto;

}

當 flex 取值為一個非負數(shù)字,則該數(shù)字為 flex-grow 值,flex-shrink 取 1,flex-basis 取 0%,如下是等同的:

.item {flex: 1;}

.item {

flex-grow: 1;

flex-shrink: 1;

flex-basis: 0%;

}

當 flex 取值為一個長度或百分比,則視為 flex-basis 值,flex-grow 取 1,flex-shrink 取 1,有如下等同情況(注意 0% 是一個百分比而不是一個非負數(shù)字):

.item-1 {flex: 0%;}

.item-1 {

flex-grow: 1;

flex-shrink: 1;

flex-basis: 0%;

}

.item-2 {flex: 24px;}

.item-1 {

flex-grow: 1;

flex-shrink: 1;

flex-basis: 24px;

}

當 flex 取值為兩個非負數(shù)字,則分別視為 flex-grow 和 flex-shrink 的值,flex-basis 取 0%,如下是等同的:

.item {flex: 2 3;}

.item {

flex-grow: 2;

flex-shrink: 3;

flex-basis: 0%;

}

當 flex 取值為一個非負數(shù)字和一個長度或百分比,則分別視為 flex-grow 和 flex-basis 的值,flex-shrink 取 1,如下是等同的:

.item {flex: 2333 3222px;}

.item {

flex-grow: 2333;

flex-shrink: 1;

flex-basis: 3222px;

}

flex-basis 規(guī)定的是子元素的基準值。所以是否溢出的計算與此屬性息息相關。flex-basis 規(guī)定的范圍取決于 box-sizing。這里主要討論以下 flex-basis 的取值情況:

auto:首先檢索該子元素的主尺寸,如果主尺寸不為 auto,則使用值采取主尺寸之值;如果也是 auto,則使用值為 content。

content:指根據(jù)該子元素的內(nèi)容自動布局。有的用戶代理沒有實現(xiàn)取 content 值,等效的替代方案是 flex-basis 和主尺寸都取 auto。

百分比:根據(jù)其包含塊(即伸縮父容器)的主尺寸計算。如果包含塊的主尺寸未定義(即父容器的主尺寸取決于子元素),則計算結(jié)果和設為 auto 一樣。

舉一個不同的值之間的區(qū)別:

.parent {

display: flex;

width: 600px;

}

.parent > div {

height: 100px;

}

.item-1 {

width: 140px;

flex: 2 1 0%;

background: blue;

}

.item-2 {

width: 100px;

flex: 2 1 auto;

background: darkblue;

}

.item-3 {

flex: 1 1 200px;

background: lightblue;

}

主軸上父容器總尺寸為 600px

子元素的總基準值是:0% + auto + 200px = 300px,其中

- 0% 即 0 寬度

- auto 對應取主尺寸即 100px

故剩余空間為 600px - 300px = 300px

伸縮放大系數(shù)之和為: 2 + 2 + 1 = 5

剩余空間分配如下:

- item-1 和 item-2 各分配 2/5,各得 120px

- item-3 分配 1/5,得 60px

各項目最終寬度為:

- item-1 = 0% + 120px = 120px

- item-2 = auto + 120px = 220px

- item-3 = 200px + 60px = 260px

當 item-1 基準值取 0% 的時候,是把該項目視為零尺寸的,故即便聲明其尺寸為 140px,也并沒有什么用,形同虛設

而 item-2 基準值取 auto 的時候,根據(jù)規(guī)則基準值使用值是主尺寸值即 100px,故這 100px 不會納入剩余空間

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • What is Flex? Flex 是 Flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最...
    6ed7563919d4閱讀 1,379評論 2 9
  • Flex布局是Css3中新加入的額外布局系統(tǒng)。傳統(tǒng)布局基于盒模型,依賴“display”、“position”、“...
    饑人谷_Pizza閱讀 2,467評論 0 2
  • 前言 FlexBox是css3的一種新的布局方式,天生為解決布局問題而存在的它,比起傳統(tǒng)的布局方式,我們使用Fle...
    zevei閱讀 1,537評論 23 3
  • 在如漢女的口中介紹宋詞常識別有風味。 (詞牌、長短句、上下闕等) 你知道的詞牌名:十六字令、清平樂?虞美人? 猜猜...
    難得清明閱讀 570評論 0 1
  • 其實面試的那段時間早過了…… 對,早就過了…… 只記得那時的感受,心里的觸動,實際上到底是什么,已經(jīng)都忘了。 南都...
    晨硯閱讀 155評論 0 0

友情鏈接更多精彩內(nèi)容