zoukankan      html  css  js  c++  java
  • flex和flex:1的含义

    一、flex详解

    flex可以参考阮一峰老师的flex布局教程,很详细看完啥都懂了

    链接:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool

    二、flex设为1和auto的区别

    当我看完阮老师的flex教程还是对flex:1或者flex:0%等存在疑惑,然后又看到一篇博客,是对flex的一个补充吧

    首先明确一点是, flex 是 flex-growflex-shrinkflex-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;
             600px;
        }
        .parent > div {
            height: 100px;
        }
        .item-1 {
             140px;
            flex: 2 1 0%;
            background: blue;
        }
        .item-2 {
             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 不会纳入剩余空间

    • 如图:

    更多资料可以参考:

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

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/zhus/p/7161702.html
Copyright © 2011-2022 走看看