flex

語法:

flex:none | <' flex-grow '> <' flex-shrink >'? || <' flex-basis '>

預設值看各分拆屬性

適用於:flex子項

繼承性:無

動畫性:否

計算值:看各分拆屬性

取值:

none:
none關鍵字的計算值為: 0 0 auto
<' flex-grow '>:
用來指定增加比率,即剩餘空間是正值時此「flex子項」相對於「flex容器」裡其他「flex子項」能分配到空間比例。
在「flex」屬性中該值如果被省略則預設為「1」
<' flex-shrink '>:
用來指定收縮比率,即剩餘空間是負值時此「flex子項」相對於「flex容器」裡其他「flex子項」能收縮的空間比例。
在收縮的時候收縮比率會以伸縮基准值加權
在「flex」屬性中該值如果被省略則預設為「1」
<' flex-basis '>:
用來指定伸縮基准值,即在根據伸縮比率計算出剩餘空間的分布之前,「flex子項」長度的起始數值。
在「flex」屬性中該值如果被省略則預設為「0%」
在「flex」屬性中該值如果被指定為「auto」,則伸縮基准值的計算值是自身的 <' width '> 設定,如果自身的寬度沒有定義,則長度取決於內容。

說明:

復合屬性。設定或檢索彈性盒模型物件的子元素如何分配空間。
  • 如果縮寫「flex: 1」, 則其計算值為「1 1 0%」
  • 如果縮寫「flex: auto」, 則其計算值為「1 1 auto」
  • 如果「flex: none」, 則其計算值為「0 0 auto」
  • 如果「flex: 0 auto」或者「flex: initial」, 則其計算值為「0 1 auto」,即「flex」初始值
  • 示例:如下情況每個元素的計算寬是多少

    Code:

    <ul class="flex"> <li>a</li> <li>b</li> <li>c</li> </ul> .flex{display:flex;width:800px;margin:0;padding:0;list-style:none;} .flex :nth-child(1){flex:1 1 300px;} .flex :nth-child(2){flex:2 2 200px;} .flex :nth-child(3){flex:3 3 400px;}

    本例定義了父容器寬(即主軸寬)為800px,由於子元素設定了伸縮基准值flex-basis,相加300+200+400=900,那麼子元素將會溢出900-800=100px;
    由於同時設定了收縮因子,所以加權綜合可得300*1+200*2+400*3=1900px;
    於是我們可以計算a,b,c將被移除的溢出量是多少:
    a被移除溢出量:(300*1/1900)*100,即約等於16px
    b被移除溢出量:(200*2/1900)*100,即約等於21px
    c被移除溢出量:(400*3/1900)*100,即約等於63px
    最後a,b,c的實際寬度分別為:300-16=284px, 200-21=179px, 400-63=337px

  • 仍然是上面這個例子,不過將容器的寬度改成了1500px

    Code:

    <ul class="flex"> <li>a</li> <li>b</li> <li>c</li> </ul> .flex{display:flex;width:1500px;margin:0;padding:0;list-style:none;} .flex :nth-child(1){flex:1 1 300px;} .flex :nth-child(2){flex:2 2 200px;} .flex :nth-child(3){flex:3 3 400px;}
    本例定義了父容器寬(即主軸寬)為1500px,由於子元素設定了伸縮基准值flex-basis,相加300+200+400=900,那麼容器將有1500-900=600px的剩餘寬度;
    於是我們可以計算a,b,c將被增加量是多少:
    a的增加量:(1/(1+2+3))*600,即約等於100px
    b的增加量:(2/(1+2+3))*600,即約等於200px
    c的增加量:(3/(1+2+3))*600,即約等於300px
    最後a,b,c的實際寬度分別為:300+100=400px, 200+200=400px, 400+300=700px
    從本例能看出:

    當「flex-basis」在「flex」屬性中不為0時(包括值為auto,此時伸縮基准值等於自身內容寬度),「flex子項」將分配容器的剩餘空間(剩餘空間即等於容器寬度減去各項的伸縮基准值)

    當「flex-basis」在「flex」屬性中等於0時,「flex子項」將分配容器的所有空間(因為各項的伸縮基准值相加等於0,剩餘空間等於容器寬度減去各項的伸縮基准值,即減0,最後剩餘空間值等於容器寬度),所以可以借助此特性,給各子項定義「flex: n」來進行按比例均分容器總寬度

  • 對應的腳本特性為flex

兼容性:

  • 淺綠 = 支援
  • 紅色 = 不支援
  • 粉色 = 部分支援
Values IE Firefox Chrome Safari Opera iOS Safari Android Browser Android Chrome
Basic Support 6.0-10.0 2.0-21.0 4.0-20.0 6.0 15.0+-webkit- 6.0-6.1 2.1-4.3 18.0-19.0
11.0+ 22.0+ 21.0+-webkit- 6.1+-webkit- 17.0+ 7.0+-webkit- 4.4+ 20.0+-webkit-
29.0+ 9.0+ 9.0+ 28.0+

示例:

本頁最後更新時間:

2015.7.29