首先明確一點是, 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 取值為一個非負數字,則該數字為 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% 是一個百分比而不是一個非負數字):
~~~
.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 取值為兩個非負數字,則分別視為 flex-grow 和 flex-shrink 的值,flex-basis 取 0%,如下是等同的:
~~~
.item {flex: 2 3;}
.item {
flex-grow: 2;
flex-shrink: 3;
flex-basis: 0%;
}
~~~
當 flex 取值為一個非負數字和一個長度或百分比,則分別視為 flex-grow 和 flex-basis 的值,flex-shrink 取 1,如下是等同的:
~~~
.item {flex: 2333 3222px;}
.item {
flex-grow: 2333;
flex-shrink: 1;
flex-basis: 3222px;
}
~~~
`flex-basis` 規定的是子元素的基準值。所以是否溢出的計算與此屬性息息相關。flex-basis 規定的范圍取決于 `box-sizing`。這里主要討論以下 flex-basis 的取值情況:
`auto`:首先檢索該子元素的主尺寸,如果主尺寸不為 auto,則使用值采取主尺寸之值;如果也是 auto,則使用值為 content。
`content`:指根據該子元素的內容自動布局。有的用戶代理沒有實現取 content 值,等效的替代方案是 flex-basis 和主尺寸都取 auto。
`百分比`:根據其包含塊(即伸縮父容器)的主尺寸計算。如果包含塊的主尺寸未定義(即父容器的主尺寸取決于子元素),則計算結果和設為 auto 一樣。
#### 舉一個不同的值之間的區別:
~~~
<div class="parent">
<div class="item-1"></div>
<div class="item-2"></div>
<div class="item-3"></div>
</div>
<style type="text/css">
.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;
}
</style>
~~~
主軸上父容器總尺寸為 600px
子元素的總基準值是:0% + auto + 200px = 300px,其中
~~~
- 0% 即 0 寬度
- auto 對應取主尺寸即 100px
~~~
故剩余空間為 600px - 300px = 300px
伸縮放大系數之和為: 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` 的時候,根據規則基準值使用值是主尺寸值即 100px,故這 100px 不會納入剩余空間
效果圖:

- 布局
- display:table布局
- display:flex彈性布局
- html
- 1.1關于文字小技巧
- 1.2加載
- 1.3蘋果和安卓樣式兼容問題
- 1.4結構技巧
- 1.5兼容ie7,ie8技巧
- css
- 1.1內容不夠,頁面固定在底部
- 1.2 css屬性書寫順序
- 1.3font和line-height之CSS代碼書寫順序不同,導致顯示效果不一樣
- 1.4 flex設置成1和auto有什么區別
- 1.5帶三角形的對話框
- 1.6css選擇器
- 1.6.1通用兄弟選擇器E ~ F
- 1.6.2相鄰兄弟選擇器E + F
- 1.6.3 CSS3結構選擇器
- 1.6.4 屬性選擇器
- 1.6.7 class^=,class*= ,class$= 的含義
- 1.7偽類
- 1.7.1:not(s)
- 1.9inherit和 initial
- 2.0 css技巧
- css3
- 1.2 背景background
- 1.3 transform
- 1.3.1移動translate
- 1.3.2縮放scale
- 1.3.3旋轉rotate
- 1.3.4扭曲skew
- 1.4 Transition
- 1.5 animate
- 1.6 calc()
- 1.7 Gradients漸變
- 1.8 backface-visibility
- 1.9 text-size-adjust
- sass知識點
- 1.1sass寫法轉化
- 1.1.1 sass的轉換寫法
- 1.2 & 嵌套寫法
- 1.2變量
- 1.2.1 默認值
- 1.2.2 全局變量和局部變量
- 1.2.3 嵌套
- 1.2.4 偽類選擇器
- 1.2.5變量用井號花括號包裹
- 1.2.6 多個變量一起聲明
- 1.3混合宏
- 1.3.1不帶參數的混合宏
- 1.3.2傳一個不帶值的參數
- 1.3.3傳多個不帶值的參數
- 1.3.4傳一個參數的值
- 1.3.5傳多個參數的值
- 1.3.6參數變量名后面加...(省略號)
- 1.4文件導入
- 1.5繼承@extend
- 1.6占位符%
- 1.7混合宏VS繼承VS占位符
- 1.8 @media在sass中寫法
- 1.9 @content的作用
- sass基本運算
- 1.1[Sass運算]加法
- 1.2[Sass運算]減法
- 1.3[Sass運算]乘法
- 1.4[Sass運算]除法
- sass函數
- 1.1 @if函數
- 1.2for函數
- 1.3 while函數
- 1.4 each循環
- 函數
- 1.1一些函數的意思
- 1.2if else函數
- 1.3 i++和++i的區別
- 1.4for函數
- UI設計規則
- 1.1字體
- 1.2尺寸
- 1.3 注意點
- 1.4 界面設計注意點