1. 程式人生 > 其它 >程式碼驗證flex:1與flex-grow:1的區別與計算方式

程式碼驗證flex:1與flex-grow:1的區別與計算方式

技術標籤:CSS

前言:在阮大大的flex教程中說:flex屬性是flex-grow,flex-shrinkflex-basis的簡寫,預設值為0 1 auto。後兩個屬性可選。大家會誤以為只寫flex的效果和flex-grow是完全一樣的,實則它們的計算方式是完全不同的,在使用時候要注意,使用正確的放大屬性,從而達到自己想要的效果。

1. flex的寬度計算方式是分配 "容器剩餘空間+具有flex屬性的元素自身尺寸":
舉例:在一個width:400px的容器中,有a、b、c 三個width:100px的元素,給a元素flex:2的屬性,給b元素flex:1的屬性,不給c元素。

計算寬度的規則是:(1)容器剩餘空間400px-300px = 100px (2)參具有flex屬性的元素自身尺寸100px+100px = 200px(3)求和100px+200px = 300px

把這300px按2:1的比例分給a和b ,最後:a:width:200px ; b:width:100px ; c:width:100px

程式碼驗證:

 <style>
        .container {
            display: flex;
            width: 400px;
            height: 200px;
            background-color: red;
        }
        .a {
            width: 100px;
            flex: 2;
            background-color: blue;
        }
        .b {
            width: 100px;
            flex: 1;
            background-color: green;
        }
        .c {
            width: 100px;
            background-color: yellow;
        }
    </style>

    <div class="container">
        <div class="a"></div>
        <div class="b"></div>
        <div class="c"></div>
    </div>

效果如下:

2. flex:grow的寬度計算方式是隻分配"容器剩餘空間",但是要加上元素自身的尺寸:
舉例:還是在一個width:400px的容器中,有a、b、c 三個width:100px的元素,給a元素flex-grow:2的屬性,給b元素flex-grow:1的屬性,不給c元素。
計算寬度的規則是:(1)容器剩餘空間400px-300px = 100px
把這剩餘的100px按2:1的比例分給a和b:(2)a:2份+自身寬度100px (3)b:1份+自身寬度100px
最後:a:width:166.7px ; b:width:133.3px ; c:width:100px

程式碼驗證:

    <style>
        .container {
            display: flex;
            width: 400px;
            height: 200px;
            background-color: red;
        }
        .a {
            width: 100px;
            flex-grow: 2;
            background-color: blue;
        }
        .b {
            width: 100px;
            flex-grow: 1;
            background-color: green;
        }
        .c {
            width: 100px;
            background-color: yellow;
        }
    </style>

    <div class="container">
        <div class="a"></div>
        <div class="b"></div>
        <div class="c"></div>
    </div>

效果如下:

補充2個剩餘空間為0的例子:
1、 在一個width:300px的容器中,有a、b、c 三個width:100px的元素,給a元素flex:3的屬性,給b元素flex:2的屬性,不給c元素。
計算寬度是:剩餘空間0 + 參與flex專案尺寸200px ,按比例給a3份,b2份。
最後:a:width:120px ; b:width:80px ; c:width:100px

2、 在一個width:300px的容器中,有a、b、c 三個width:100px的元素,給a元素flex-grow:3的屬性,給b元素flex-grow:2的屬性,不給c元素。
計算寬度是:剩餘空間0 專案沒有可分配的空間,尺度不會發生變化。
最後:a:width:100px ; b:width:100px ; c:width:100px

附:本文參考文章https://blog.csdn.net/weixin_49684995/article/details/107880408