flex布局

159 阅读3分钟

flex布局(弹性布局)

  • 是一种浏览器提倡的布局模型
  • 布局网页更简单、灵活
  • 避免浮动脱标的问题 (flex布局不会脱标)
  • *注意:*如果子盒子没有设置高度,子盒子将会拉伸填满父盒子高度

flex布局模型盒子构成

  • 目标:能够使用Flex布局模型灵活、快速的开发网页

  • 作用

    • 基于 Flex 精确灵活控制块级盒子的布局方式,避免浮动布局中脱离文档流现象发生
    • Flex布局非常适合结构化布局
  • 设置方式:父元素添加display:flex子元素自动挤压或拉伸。

    • 添加display:flex后的视觉效果:子级一行排列/水平排列
    • 水平排列:默认主轴在水平,弹性盒子默认沿着主轴排列
  • 组成部分

    • 弹性容器(父级)
    • 弹性盒子(子级)
    • 主轴
    • 侧轴/交叉轴

主轴对齐方式

修改主轴对齐方式属性: justify-content


            /* 居中 */
            justify-content: center;
​
            /* 间距在弹性盒子(子级)之间 */
            justify-content: space-between;
​
            /* 所有地方间距相等 */
            justify-content: space-evenly;
​
            /* 间距加载子级两侧 */
            /* 视觉效果:子级之间的距离是父级两头距离的2倍 */
            justify-content: space-around;

侧轴(交叉轴)对齐方式

目标:使用align-items调节元素在侧轴的对齐方式

修改侧轴对齐方式属性:

  • align-items(添加到弹性容器)
  • align-self: 控制某个弹性盒子在侧轴的对齐方式(添加到弹性盒子)
  • 
        /* 拉伸,默认值 */
       align-items: stretch; 
             
       
        /* 居中 */
       align-items: center; 
    
- ==注意:==测试`stretch`时要注意子级盒子高度
​
**单独设置某个弹性盒子的侧轴对齐方式**- `align-self: center;`

.box div:nth-child(2) { align-self: center; }

改变主轴的方向(重要)

flex-direction: ;

  • 改变主轴的方向,从水平改垂直

  • column从水平改为垂直

    • flex-direction: column;
  • flex布局就有两个方向,主轴和侧轴,只要改变主轴方向侧轴也跟着改变

  • 注意:

    • 一旦修改轴向

      • 1.要先确定主轴方向
      • 2.再选择对应的属性实现主轴或侧轴的对齐方式
      • 比如:主轴从水平改为垂直方向,justify-content: center;的视觉效果:就是垂直居中,align-items: center;的视觉效果:就是实现水平居中

伸缩比

目标:使用flex属性修改弹性盒子伸缩比

属性 flex :值;

取值分类 :数值(整数)

注意 : 只占用父盒子剩余尺寸

弹性盒子换行

  • 目标:使用flex-wrap实现弹性盒子多行排列效果

  • 弹性盒子换行显示:flex-wrap: wrap;

  • 调整对齐方式:align-content

    • 取值与justify-content基本相同

文字省略号与flex布局配合小技巧

注意:

  1. 盒子要有宽度或者父盒子要有宽度
  2. 如果不想设置具体宽度可以设置flex:1; width:0 ;
  3. 前提条件是 父盒子要设置flex

.dingdan_content .goods .txt {
    flex: 1;
    /* 溢出时显示省略号 */
    /* 因为弹性盒子的尺寸可以被内容撑开,width: 0; 不换行的文字可以撑开这个盒子的尺寸,所以溢出的部分显示为省略号 */
    width: 0;
}
​
.dingdan_content .goods .txt h5 {
    text-overflow: ellipsis;
    /* 不换行 */
    white-space: nowrap;
    /* overflow: hidden;是给width: 0;用的 */
    overflow: hidden;
}

flex布局拓展

  • 当给a标签设置宽高时,父级盒子添加了display:flex;属性,则a标签宽高生效

  • 在flex布局下父级设置flex 子级若为行内元素则设置宽高生效

  • 让文字在一个盒子里实现水平垂直居中

    • 
      <div class="status"><i>待付款</i></div>
      
    • 
      .dingdan_content .status {
          /* 让文字在一个盒子里实现水平垂直居中 */
          display: flex;
          justify-content: center;
          align-items: center;
          width: 120px;
          color: #e05e30;
      }