17-CSS伸缩布局

伸缩布局

  • 如何使用伸缩布局?
    只需要给元素设置 display: flex;属性
  • 伸缩布局分类
    • 伸缩容器: 给哪个元素添加了display: flex;属性
    • 伸缩项: 伸缩容器中的盒子

伸缩布局主轴

  • 只要将一个元素变为了伸缩的容器, 那么里面的伸缩项自动就会水平排版

  • 默认会按照主轴从左向右的方向排版
    flex-direction:属性就是专门用于设置主轴的方向的,
    默认取值是row(从左至右)
    row-reverse(从右至左)

  • 如何修改主轴的方向
    默认情况下主轴是在水平方向的, 但是只要设置了flex-direction: column;
    就会将主轴修改为垂直方向

    注意点:
    只要主轴变为了垂直方向, 那么侧轴就会自动变为水平方向
    主轴和侧轴永远都是十字交叉的,而且不论主轴的起点在下面还是在上面,侧轴的起点永远都在左边




    
    Title
    



  • 1
  • 2
  • 3
17-CSS伸缩布局_第1张图片
伸缩布局主轴和侧轴

主轴对齐方式

  • 伸缩项默认是和主轴起点对齐

  • 设置伸缩项和主轴终点对齐
    justify-content: flex-end;

    17-CSS伸缩布局_第2张图片

  • 设置伸缩项在伸缩容器中居中
    justify-content: center;

    17-CSS伸缩布局_第3张图片

  • space-between; 两端对齐, 第一个伸缩项会和主轴的起点对齐最后一个伸缩项会和主轴的终点对齐其它项目平分多余的间隙
    间隙的计算公式: (伸缩容器宽度 - 所有伸缩项的宽度) / (伸缩项 - 1);
    justify-content: space-between;

    17-CSS伸缩布局_第4张图片

  • space-around; 环绕对齐, 给所有伸缩项的两遍都添加间隙
    中间盒子两端的间隙是左右两端盒子间隙的2倍
    间隙的计算公式: (伸缩容器宽度 - 所有伸缩项的宽度) / (伸缩项 * 2);
    justify-content: space-around;

    17-CSS伸缩布局_第5张图片


侧轴对齐方式

  • 侧轴的默认对齐方式: 和侧轴的起点对齐
    align-items: flex-start;

    17-CSS伸缩布局_第6张图片

  • 伸缩项和侧轴终点对齐
    align-items: flex-end;

    17-CSS伸缩布局_第7张图片

  • 伸缩项在侧轴居中对齐
    align-items: center;

    17-CSS伸缩布局_第8张图片

注意点:
侧轴没有主轴的两端对齐和环绕对齐

  • 按照所有伸缩项内容的基线对齐
    align-items: baseline;
    17-CSS伸缩布局_第9张图片

主轴和侧轴单独设置对齐方式

  • 设置justify-self: ;属性来设置伸缩项主轴对齐方式
  • 设置align-self: ;属性来设置伸缩项侧轴对齐方式



    
    Title
    


  • 1
  • 2
  • 3

17-CSS伸缩布局_第10张图片

伸缩布局换行显示

  • 伸缩容器宽度小于所有伸缩项宽度时, 系统会自动等比缩放伸缩项
    如果不想让系统自动等比缩放伸缩项, 那么可以设置一个属性
    flex-wrap: wrap;来使伸缩项换行显示

  • 默认是不换行
    flex-wrap: nowrap;

    17-CSS伸缩布局_第11张图片

  • 设置换行属性
    flex-wrap: wrap;

    17-CSS伸缩布局_第12张图片

  • 将行数顺序倒序
    flex-wrap: wrap-reverse;

    17-CSS伸缩布局_第13张图片




    
    Title
    


  • 1
  • 2
  • 3
  • 4

伸缩布局换行对齐方式

  • 这种对齐方式和主轴对齐方式基本差不多,只不过实在侧轴上对齐
  • 注意点: 设置换行后元素的对齐方式, 参考点就是侧轴
  • 侧轴起点对齐
    align-content: flex-start;
  • 侧轴居中对齐
    align-content: center;
  • 侧轴环绕对齐
    align-content: space-around;
  • 侧轴等分对齐
    align-content: space-between;



    
    Title
    


  • 1
  • 2

伸缩布局排序

  • 在伸缩布局中, 可以利用order属性来给伸缩项进行排序
    默认情况下order的取值是0, 那么order会按照取值的大小来排序值小的排在前面, 值大的排在后面



    
    Title
    


  • 1
  • 2
  • 3

17-CSS伸缩布局_第14张图片

伸缩项方法比例

  • 如果想让伸缩项按照一定的比例分配伸缩容器的宽度, 那么就可以通过
    flex-grow属性来设置
  • flex-grow: 1; 那么就代表着所有伸缩项占用一份宽度

计算公式:
首先:会计算多余的宽度: 伸缩容器的宽度 - 所有伸缩项的宽度 = 多余宽度
多余的宽度 = 800 - 600 = 200
其次:会计算每份分配多大的宽度: 多余宽度 / flex-grow 值的总和200 / 6 = 33;




    
    Title
    


  • 1
  • 2
  • 3

17-CSS伸缩布局_第15张图片

伸缩项缩小比例

  • 如果伸缩容器的宽度小于伸缩项的宽度, 我们可以通过flex-shrink来设置每个伸缩项的缩小比例

计算公式:
首先:会计算溢出的宽度: 伸缩容器的宽度 - 所有伸缩项的宽度 = 多余宽度
多余的宽度 = 400 - 600 = -200
其次: 会计算权重
用当前元素flex-shrink:设置的值 * 各个元素的宽度 +
1 * 200 + 2 * 200 + 3 * 200 = 1200
第一个元素 第而个元素 第三个元素
最后: 计算收缩的空间
算溢出的宽度 * 当前元素flex-shrink:设置的值 * 当前元素的宽度 / 总权重




    
    Title
    


  • 1
  • 2
  • 3

17-CSS伸缩布局_第16张图片

伸缩项宽度设置

  • 我们可以通过flex-basis属性来设置伸缩项的宽度

注意点:
1.在伸缩布局中, 如果同时通过width和flex-basis给伸缩项设置宽度
那么会听flex-basis, width属性会失效
2.如果flex-basis是auto,那么就会听width属性

你可能感兴趣的:(17-CSS伸缩布局)