• flex布局


    一,啥是flex?

    1、Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。

    .box{
        display:flex;
    }

    webkit内核的浏览器,必须加上-webkit- 前缀

    .box{
        display:flex;
        -webkit-display:flex;
    }

    注意:设为flex布局之后,子元素的float,clear,vertical-align属性将失效。

    二、基本概念

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

    容器默认存在俩根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis),主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫main end,交叉轴的开始位置叫做cross start,结束位置叫做 cross end,项目默认沿主轴排列,单个项目占据的主轴叫做main size,占据的交叉轴叫做cross size

    三、容器的属性

    1、flex direction

    解释:决定主轴的方向,即项目的排列方向。

    .box {
         flex-direction: row | row-reverse | column | column-reverse;
    }

    1.1、四个值的意思如下:

    • row(默认值):主轴为水平方向,起点在左端
    • row-reverse:主轴为水平方向,起点在右端
    • column:主轴为垂直方向,起点在上
    • column-reverse:主轴为垂直方向,起点在下

    举个栗子:这里我将值设为row-reverse

    .box ul{
        display:flex;
        flex-direction:row-reverse;
    }
    .box ul li{
        width:200px;
        height:200px;
        background: pink;
        text-align: center;
        line-height: 200px;
        font-size: 24px;
        margin:10px;
    }

    效果:

    这里自动成了一行,主轴的起点在右边。

    2、flex-wrap

    解释:默认情况下,项目都在一条线上(又称轴线),flex-wrap属性就是定义,如果一条轴线排不下,如何换行。

    .box{
           flex-wrap: nowrap | wrap | wrap-reverse;
    }

    三个值的意思如下:

    • nowrap(默认):不换行,排不下的情况压缩项目的宽度
    • wrap:换行,第一行在上方
    • wrap-reverse:换行,第一行在下方

    这里分别举俩个栗子:

    nowrap:

    .box ul{
        display:flex;
        flex-wrap:nowrap;
    }

    效果:

    我是设置成子元素的宽度为200,但排不下,被压缩成了91。

    wrap-reverse:

    .box ul{
        display:flex;
        flex-wrap:wrap-reverse;
    }

    效果:

    3、flex-flow

    解释:这个属性是flex-direction和flex-wrap的简写方式,默认值是flex-flow:row nowrap;

    4、justify-content

    解释:定义了项目在主轴的对齐方式

    .box {
           justify-content: flex-start | flex-end | center | space-between | space-around;
    }

    5个值的意思如下,具体对齐方式与主轴的方向有关系,下面举栗主轴方向从左到右:

    • flex-start(默认):左对齐
    • flex-end:右对齐
    • center:居中
    • space-between:俩端对齐,项目之间的间距都相等
    • space-around:每个项目俩侧的间距相等,所以,俩个项目之间的间隔比俩端项目分别与边框的距离大一倍。

    这里,我觉得space-between这个值比较常用,举栗:

    .box ul{
        display:flex;
        justify-content:space-between;
    }

    效果:

    5、align-item

    解释:定义项目在交叉轴上如何对齐

    .box {
           align-items: flex-start | flex-end | center | baseline | stretch;
    }

    5个值得意思如下:

    • flex-start:交叉轴的起点对齐
    • flex-end:交叉轴的终点对齐
    • center:交叉轴的中点对齐
    • stretch(默认值):如果项目未设置高度或者设置为auto,将占满整个容器的高度
    • baseline:项目的第一行文字的基线对齐

    个人觉得flex-start较常用,举栗:

    .box ul{
        display:flex;
        justify-content:space-between;
        align-item:flex-start;
    }

    效果:

    6、align-content

    解释:定义了多根轴线的对齐方式,如果项目只有一根轴线,该属性不起作用

    .box {
            align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    }
    • flex-start:与交叉轴的起点对齐。
    • flex-end:与交叉轴的终点对齐。
    • center:与交叉轴的中点对齐。
    • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
    • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
    • stretch(默认值):轴线占满整个交叉轴。

    四、项目属性

    1、order

    定义项目的排列顺序,数值越小,排列越靠前,默认为0。

     举栗三个内容分别为1、2、3的盒子设置order后的排列顺序:

    .item:nth-child(1){
        order:1;
    }
    .item:nth-child(2){
        order:0;
    }
    .item:nth-child(3){
        order:-1;
    }

    效果:

    2、flex-grow

    定义项目的放大比例,默认为0,就是如果有剩余空间,也不放大。

    语法:

    .item {
            flex-grow: <number>; /* default 0 */
    }

    栗子:

    .item:nth-child(1){
        flex-grow:1;
    }

    效果:

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

    3、flex-shrink

    定义了项目的缩小比例,默认为1,就是如果空间不足,该项目将缩小。

    语法:

    .item {
           flex-shrink: <number>; /* default 1 */
    }

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

    4、align-self

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

    .item {
            align-self: auto | flex-start | flex-end | center | baseline | stretch;
    }

    举栗:

    .item:nth-child(2){
        height:100px;
        align-self:flex-end;
    }

    效果:

    这里三个元素父盒子的align-item属性我是设置flex-start的,但第二个项目我设置了flex-end,所以他沿交叉轴下沿对齐。

    该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

  • 相关阅读:
    【memesuite】 FATAL: Template does not contain data section
    可变剪切位点强度计算[自用]
    面试官:分布式环境下,如何实现 Session共享
    MySQL 大表优化方案,收藏了细看
    为什么我们不用数据库生成 ID?
    10 分钟彻底理解 Redis 的持久化和主从复制
    linux系统变为只读,提示Readonly file system的解决办法
    一文读懂MySQL所有日志
    一次简单的 JVM 调优
    读文献BioNet: an RPackage for the functional analysis of biological networks
  • 原文地址:https://www.cnblogs.com/xlj-code/p/6097890.html
Copyright © 2020-2023  润新知