欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CSS之Flex弹性布局

程序员文章站 2022-04-30 09:12:16
...

—flex弹性布局实现水平垂直居中
父盒子display:flex; 子盒子margin:auto;

概念: 采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

父容器(display:flex)属性:

    1.flex-direction : 规定子元素的排列方向
        row(默认值):主轴为水平方向,起点在最左端。
        row-reverse:主轴为水平方向,起点在最右端。
        column:主轴为垂直方向,起点在最上沿。
        column-reverse:主轴为垂直方向,起点在最下沿。

    2.flex-wrap : 
        nowrap (默认值) : 单行显示,不换行
        wrap :  宽度不足换行显示
        wrap-reverse : 宽度不足换行显示,但是从下往上显示(原本前面的盒子跑到最下层显示)

        说明: 
        a.默认单行显示不换行,当盒子过多父盒子宽度不足时,会自动调整子盒子宽度,直至内容过多无法调整最终一行内溢出。

    3.flex-flow : flex-direction与flex-wrap的组合写法,第一个表示direction第二个表示wrap,中间用空格分隔

    4.justify-content : 决定了主轴方向上子项的对齐和分布方式(类似于word中的对齐排版)
        flex-start(默认值):左对齐
        flex-end:右对齐
        center: 居中
        space-between:两端对齐,项目之间的间隔都相等。
        space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。


    5.align-items : 定义项目在 交叉轴/侧轴 上如何对齐
        flex-start:交叉轴的起点对齐。
        flex-end:交叉轴的终点对齐。
        center:交叉轴的中点对齐。
        baseline: 项目的第一行文字的基线对齐。
        stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

        说明: a.容器里的项目若不设置固定高度则由于align-items默认为stretch,
                视觉上会导致项目默认高度是撑满整个容器的,即100%。
                可通过设置项目固定高度或改变align-items的值来解决

              b.关于主轴和侧轴,我的理解为水平和垂直 或 垂直和水平。即
                    主轴代表水平方向那侧轴就代表垂直方向,反之亦然


    6.align-content : 定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用
        flex-start:表现为起始对齐
        flex-end:表现为结束位置对齐
        center:表现为居中对齐
        space-between:表现为两端对齐,轴线之间的间隔平均分布。
        space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
        space-evenly:每一行元素都完全上下等分。
        stretch(默认值):轴线占满整个交叉轴。

        说明:关于align-items和align-cotent容易混淆:
                前者多用于item在主轴上只有一行,而后者多用于item在主轴上存在多行.
                且在items由于容器宽度不足换行时,上下两个item之间会产生一大片间距,可通过align-content解决

子容器属性:
    1.order : 定义项目的排列顺序。数值越小,排列越靠前,默认为0。

    2.flex-grow : 用于设置 item 在主轴方向上的拉伸系数,即如果 flex 容器还有剩余空间,会按照各 item 
                   设置的拉伸系数拉伸item长度。默认值为 0,即不拉伸。

                   个人理解:
                        拉伸系数 * 容器主轴方向上空白长度 = 该item拉伸的长度

                        或 几个item拉伸系数为1 2 1,则按1:2:1的比例拉伸item以平分主轴方向上空白长度


    3.flex-shrink : 用于设置 item 在主轴方向上的收缩因子,跟 flex-grow 刚好反着来,默认
                     为1,值越大收缩倍数越大,0 表示不收缩,负值无效。
                     另外,如果设置了换行属性,那么这个就无效了。

    4.flex-basis : 用于设置 items 在主轴方向的大小,如果主轴是水平方向,相当于设置 width,此时,该属性值会覆盖掉
                    width 设置的大小。

                    取值: flex-basis: <'width'> | auto(默认值)

    5.flex :  flex-grow,flex-shrink,flex-basis 三个属性的简化使用

    6.align-self : 用于给单个 item 设置交叉轴方向上的排版布局方式,属性值和作用跟 align-items 一样,区别仅在于 
                    align-items 是 flex 容器的属性,它会作用于所有的 items 上;而 align-self 允许对单个 item 设置,该值会覆盖 align-items 设置的属性值。