flex設(shè)置成1和auto有什么區(qū)別

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

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

.item{flex:23333222234px;}.item{flex-grow:2333;flex-shrink:3222;flex-basis:234px;}

當(dāng)flex取值為none,則計算值為 0 0 auto,如下是等同的:

.item{flex:none;}.item{flex-grow:0;flex-shrink:0;flex-basis:auto;}

當(dāng)flex取值為auto,則計算值為 1 1 auto,如下是等同的:

.item{flex:auto;}.item{flex-grow:1;flex-shrink:1;flex-basis:auto;}

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

.item{flex:1;}.item{flex-grow:1;flex-shrink:1;flex-basis:0%;}

當(dāng)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;}

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

.item{flex:23;}.item{flex-grow:2;flex-shrink:3;flex-basis:0%;}

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

.item{flex:23333222px;}.item{flex-grow:2333;flex-shrink:1;flex-basis:3222px;}

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

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

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

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

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

.parent{display:flex;width:600px;}.parent >div{height:100px;}.item-1{width:140px;flex:210%;background:blue;}.item-2{width:100px;flex:21 auto;background:darkblue;}.item-3{flex:11200px;background:lightblue;}

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

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

- 0% 即 0 寬度- auto 對應(yīng)取主尺寸即 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

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

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

更多資料可以參考:

http://www.w3.org/html/ig/zh/css-flex-1/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 原文地址:https://segmentfault.com/q/1010000004080910/a-102000...
    小豆soybean閱讀 20,719評論 2 6
  • 首先明確一點是, flex 是 flex-grow、flex-shrink、flex-basis的縮寫。故其取值可...
    指尖的跳動閱讀 348評論 0 0
  • 前言 FlexBox是css3的一種新的布局方式,天生為解決布局問題而存在的它,比起傳統(tǒng)的布局方式,我們使用Fle...
    zevei閱讀 1,439評論 23 3
  • H5移動端知識點總結(jié) 閱讀目錄 移動開發(fā)基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,632評論 0 26
  • 移動開發(fā)基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,519評論 0 6