flex布局

190 阅读4分钟

什么是flex

使用 flex 的元素就叫做容器,容器默认存在 2 条轴线,主轴线(main axis)和垂直的交叉轴线(cross axis)。轴线开始的位置被叫做 main/cross start,结束的位置被叫做 main/cross end。项目是沿着主轴线开始、结束方向排列的。

知识点

flex-direction

设置容器的主轴方向和主轴的起点

flex-direction: row;                           // (默认值)主轴为水平方向,起点在左侧
flex-direction: row-reverse;             //  主轴为水平方向,起点在右侧
flex-direction: column;                    //  主轴为垂直方向,起点在顶部
flex-direction: column-reverse;       //  主轴为垂直方向,起点在底部

flex-wrap

设置如果一条轴线上排满了是否换行,是否在一条轴线

flex-wrap: nowrap;                      //  (默认值)设置不换行,就挤着
flex-wrap: wrap;                          //  换行,按顺序第一行从交叉轴线起点端开始排列
flex-wrap: wrap-reverse;             //  换行,但是被后来居上了,第一行从交叉轴线结束端开始排列

justify-content

设置项目在主轴方向的排列方式

justify-content: flex-start;                //(默认值)主轴线起点对齐
justify-content: flex-end;                //  主轴线终点对齐
justify-content: center;                   //  主轴线中心对齐
justify-content: space-between;     //  主轴线两端对齐,项目间距相等
justify-content: space-around;        //  项目两侧间距相等,所以项目间距是两端间距2justify-content: space-evenly;         //  项目间距相等,与两端间距也相等

align-items

设置项目在交叉轴上的排列对齐方式

align-items: flex-start;    //交叉轴的起点对齐
align-items: flex-end;    //交叉轴的终点对齐。
align-items: center;      //交叉轴居中对齐。
align-items: baseline;  //项目的第一行文字的基线对齐。
align-items: stretch;     //如果项目未设置高度或设为auto,将占满整个容器的高度。

align-content

设置多轴线的在交叉轴线上的对齐方式,只对多轴线起作用

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

flex-grow

用来定义项目的放大比例,也就是对剩余空间的分配能力。默认值是0,表示不参与分配。如果是2则表示比1的多分配1倍。

flex-grow: number; // default 0 

flex-shrink

定义项目的缩小比例,如果项目空间不足,将会默认缩小,默认值为1.设置为0则不会缩小,负数无效等价于1。如果设置成2时,压缩效果翻倍。

flex-shrink: number; // default 1

flex-basis

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

flex-basis: length | auto; // default auto

flex

flex-grow、flex-shrink、flex-basis三个属性的缩写

flex: none | [ <'flex-grow'> <'flex-shrink'> <'flex-basis'> ]

flex布局设置flex=1时,缩放屏幕宽度被内部元素撑开的问题

在设置flex=1的元素上再设置一个 overflow: hidden 即可,

代表在该元素内部进行计算

使用

<ul class="list">
    <li>111111</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
 * {
      margin: 0;
      padding: 0;
      list-style: none;
  }
  .list {
      height: 400px;
      border: 5px solid #555;
      /*
          display: flex:
              开启弹性布局
          flex: 1;
                均分宽度
        */
      display: flex;
      /*
      flex-direction:
          指定主轴方向,起点在左端|水平方向,起点在右端|垂直方向,起点在上沿|垂直方向,起点在下沿
          row | row-reverse | column | column-reverse;
      */
      flex-direction: column;
        /*
          justify-content:    主轴方向对其方式 默认值左对齐
            左对齐|      右对齐|     居中|     两端对其,项目之间间隔相等|  每个项目两侧的间隔相等
            flex-start | flex-end | center | space-between | space-around;
        */
        justify-content: center;
        /*
            align-items:        和主轴交叉方向对齐方式,
                起点对齐|     终点对齐|   中点对齐|  基线对齐|  默认值
                flex-start | flex-end | center | baseline | stretch;
        */
        align-items: center;
    }
    .list li {
        height: 40px;
        flex: 1;

    }
    .list li:nth-child(1) {
        background-color: #00a3ed;
    }
    .list li:nth-child(2) {
        background-color: #9198e5;
    }
    .list li:nth-child(3) {
        background-color: #e66465;
    }
    .list li:nth-child(4) {
        background-color: #9198e5;
    }
    .list li:nth-child(5) {
        background-color: #00a3ed;
    }