美文网首页
关于flex弹性盒模型布局的详细介绍

关于flex弹性盒模型布局的详细介绍

作者: 亚讯 | 来源:发表于2018-11-18 19:09 被阅读73次

        Flex是Flexible Box的缩写,意为“弹性布局”,用来为盒模型提供最大的灵活性。弹性盒模型(flexible box)模块(目前是w3c候选的推荐)旨在提供一个更加有效的方式来布置,对齐和分布在容器之间的各项内容,即使它们的大小是未知或者动态变化的。·

        弹性布局的主要思想是让容器有能力来改变项目的宽度和高度,以填满可用空间(主要是为了容纳所有类型的显示设备和屏幕尺寸)的能力。也就是说:Flex布局使得子项目能够"弹性"的改变其高宽, 自由填充容器剩余空间, 以适应容器变大, 或者压缩子项目自身, 以适应容器变小; 同时还可以方便的调节子项目方向和顺序. flex常用于高宽需要自适应, 或子项目大小成比例, 或水平垂直对齐等场景.

        最重要的是弹性盒子布局与方向无关,相对于常规的布局(块是垂直和内联水平为基础),很显然,这些工作以及网页设计缺乏灵活性,无法支持大型和复杂的应用程序(特别当它涉及到改变方向,缩放、拉伸和收缩等)。

    注意:由于flexbox是一个整体模块,而不是单一的一个属性,它涉及到了很多东西,包括它的整个属性集。它们之中有一些是在父容器上设置,而有一些则是在子容器上设置。

    基本概念:Flex弹性盒模型里, 有容器和项目之分. 设置display:flex的为容器, 容器内的元素称作它的子项目, 容器有容器的一套属性, 子项目有子项目的另一套属性. (可以这么理解: father作为弹性盒子, 制定行为规范, son享受盒子的便利, 按照规范划分各自的"辖区").

    flex container:采用Flex布局的元素,即父元素,称为Flex容器,简称容器。

    flex item:父元素内包含的子元素,称为Flex项目,简称项目。

    Flex是没有方向之分的,在Flex容器中默认存在两根轴,水平的轴为 主轴main axis,垂直的轴为 侧轴cross axis。(如果改变flex-direction,主轴和侧轴也将会改变)

    主轴的开始位置(与边框的交叉点)叫做 main start ,结束位置叫做 main end 。

    侧轴的开始位置叫做 cross start , 结束位置叫做 cross end 。

    项目默认沿主轴方向排列,单个项目占据的主轴空间叫做 main size ,侧轴空间叫做 cross size 。

    以上概念可以用下图全部展现:

    弹性盒模型示意图

    基本上,项目将制定了以下任一主轴(从 main-start 到 main-end)或十字轴((从 cross-start 到 cross-end)。

    注意:

    1.css 列(CSS columns)在弹性盒子中不起作用·

    2.float,clearandvertical-align在flex项目中不起作用

    也就是说:设为Flex布局后,子元素的float、clear、vertical-align属性将失效。

    首先介绍:

    父容器(父元素)的属性

    容器共有六个属性

    1、flex-direction

            flex-direction属性

            flex-direction属性决定主轴的方向,它可能有四个值。

            row:默认值,主轴为水平方向,起点在左端。

            row-reverse:主轴为水平方向,起点在右端。

            column:主轴为垂直方向,起点在上端。

            column-reverse:主轴为垂直方向,起点在下端。

    flex-direction四种值对应的情况显示图

    2、flex-wrap

            flex-wrap属性决定项目在一行排不下的情况下是否换行,它可能有三种值。

            nowrap:默认值,不换行。

            wrap:换行,第一行在主轴开始方向,依次往主轴结束方向布置。

            wrap-reverse:换行,第一行在主轴结束方向,依次往主轴结束方向布置

    flex-wrap值对应的情况显示图

    3、flex-flow

        flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

    4、justify-content

            justify-content属性定义了项目在主轴上的对齐方式,它可能有五个值。

            flex-start:默认值,主轴开始方向对齐。

            flex-end:主轴结束方向对齐。

            center:主轴居中对齐。

            space-between:两端对齐,项目之间间隔都相等。

            space-around:每个项目两侧的间隔相等,所以项目之间间隔是项目与边框间隔的两倍。

    justify-content值对应的情况显示图

    5、align-items

        align-items属性定义了每行项目在侧轴方向上的对齐方式,它也可能有五个值。

        - flex-start:侧轴开始方向对齐。

        - flex-end:侧轴结束方向对齐。

        - center:侧轴居中对齐。

        - baseline:项目第一行文字的基线对齐

        - stretch:默认值,如果项目未设置高度或高度设为auto,将占满整个容器。

    align-items值对应的情况显示图  

    6、align-content

        align-content属性定义了容器在侧轴方向上有额外空间时,如何每排布一行,当容器只有一行时,它不起作用,它可能有六个值。

        flex-start:侧轴开始方向对齐。

        flex-end:侧轴结束方向对齐。

        center:侧轴中心中对齐。

        space-between:与侧轴两端对齐,每行轴线间隔平均。

        space-around:每根轴线两侧间隔相等。

        stretch:默认值,占满整个整个侧轴

    align-content值对应的情况显示图


    子容器(子元素的属性):

    子容器(子元素)共有六个属性

    1、order

    2、flex-grow

    3、flex-shrink

    4、flex-basis

    5、flex

    6、align-self

    order属性

    order属性定义项目的排列顺序,数值越小排列越靠前,默认为0,可能的值为任意整数。

    order属性


    flex-grow属性

    flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间也不放大。

    如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍

    flex-grow属性


    flex-shrink属性

    flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足该项目将缩小。

    负值对该属性无效,即该属性可能的值为0或正整数。

    如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

    flex-shrink属性

    flex-basis属性

    flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main-size)。浏览器根据整个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

    它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。


    flex-basis属性


    flex属性

    flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

    该属性有两个快捷值:auto (1 1 auto)(既可以放大占满空间,也可缩小) 和 none (0 0 auto)(不可放大,也不可缩小)。

    建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

    align-self属性

    align-self属性允许单个项目有与其他项目不一样的侧轴对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

    其值除auto外,其他与align-items完全一致。


    align-self属性



    免责声明:文章部分内容和图片来自网络,本人尊重原创作者提供的优质文章,在这里向原创作者表示敬意和感谢,这篇文章只用于本人的知识学习,绝非用于其他商业等用途,如有侵权,请与本人联系,并将在第一时间删除!谢谢!(联系邮箱:290976801@qq.com)

    相关文章

      网友评论

          本文标题:关于flex弹性盒模型布局的详细介绍

          本文链接:https://www.haomeiwen.com/subject/grigfqtx.html