最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Flex 属性计算规则

    正文概述 掘金(风火星辰)   2020-12-10   490

    Flex 布局中的 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​ 取值为一个非负数字,则该数字为 ​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-2 {
     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-growflex-shrinkflex-basis
    default01autonone00autoauto11auton(非负数)n10长度或百分比11长度或百分比n,m(均非负整数)nm0n,长度或百分比n1长度或百分比

    计算规则

    Flex 计算元素宽度分为两步:

    第一步:各个子元素根据 flex-basis 的值,填充父元素 第二步: 根据填充后的剩余空间大小根据flex-grow和flex-shrink伸缩

    第一步中:

    • auto​:使用子元素的尺寸
    • 长度:使用此固定长度
    • 百分比:根据其包含块(即伸缩父容器)的主尺寸计算。如果包含块的主尺寸未定义(即父容器的主尺寸取决于子元素),则计算结果和设为 ​auto​ 一样

    第二步中:

    如果经过第一步填充之后,父元素还有剩余宽度,则执行 flex-grow 计算,如果内容超出,则根据 flex-shrink 计算。

    实例一:拉伸

    <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>
    <div  class="parent">
     <div  class="item-1"></div>
     <div  class="item-2"></div>
     <div  class="item-3"></div>
    </div>
    

    大致排列如下

    Flex 属性计算规则

    ​分两步计算:

    第一步:

    • 主轴上父容器总尺寸为 600px
    • 子元素的总基准值是:0% + auto + 200px = 300px,其中
    0% 即 0 宽度
    
    auto 对应取元素自身尺寸即 100px
    
    200px 取这个固定值
    

    效果图如下:

    Flex 属性计算规则

    第二步:

    • 剩余空间为 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
    

    Flex 属性计算规则

    实例二:缩小

    缩小的计算方法和扩展的方法略有不同

    <style>
    .item-4 {
        width: 100px;
        flex: 2 1 0;
        background: blue;
    }
    .item-5 {
        width: 700px;
        flex: 2 2 auto;
        background: lightblue;
    }
    </style>
    <div  class="parent">
        <div  class="item-4"></div>
        <div  class="item-5"></div>
    </div>
    

    效果图如下:

    Flex 属性计算规则

    第一步,计算基准值:

    子元素的总基准值是:100px + 600px = 700px,大于600px,需要缩小;

    第二步,计算缩放:

    设缩小因子为x;

    100 * x + 600 * 2x = 700 - 600 // => x = 0.076
    

    各项目最终宽度为:

    item-1 = 100 - 100 * 0.076 = 92.4
    
    item-2 = 600 - 600 * 0.076 * 2 = 508
    

    效果图:

    Flex 属性计算规则


    起源地下载网 » Flex 属性计算规则

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元