博客列表 >PHP大牛成长之路:flex 布局

PHP大牛成长之路:flex 布局

周Sir-BLOG
周Sir-BLOG原创
2020年06月25日 02:29:46951浏览

flex 布局

1、什么是flex?

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。> Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。


2、基本概念

  • 任何元素都可以使用flex布局,要使用flex布局,需要将容器转换为flex盒子:display:flex;
  • 一旦将父元素转为弹性容器,内部的“子元素”就会自动成为:弹性项目;
  • 不管这个项目标签之前是什么类型,统统转为“行内块” (如span a);
    • 行内块的理解:

      行内:全部在一排显示
      块: 可以设置宽和高

-下图为网上找的图片,以加深对Flex布局的理解:

  • 容器默认存在两根轴:
  • 水平的主轴(main axis)
  • 垂直的交叉轴(cross axis)
  • 主轴的开始位置(与边框的交叉点)叫做main start
  • 结束位置叫做main end
  • 交叉轴的开始位置叫做cross start
  • 结束位置叫做cross end

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

3、flex属性

3.1 flex容器6大属性

No 属性 说明
1 flex-direction 定义主轴的方向(即项目的排列方向)
2 flex-wrap 定义flex容器是单行或者多行
3 flex-flow flex-direction 和 flex-wrap 的复合属性(简写)。
4 justify-content 定义弹性盒子元素在主轴(横轴)方向上的对齐方式。
5 align-items 定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。
6 align-content 定义flex容器内有剩余空间时垂直对齐方式-(仅多行容器有效)。

1.flex-direction属性示例:

  1. flex-direction: row; /*主轴为水平方向*/

  1. flex-direction: column; /*主轴为垂直方向*/

2.flex-wrap属性示例:

  1. flex-wrap:nowrap;/*单行排列*/

  1. flex-wrap:wrap;/*多行排列*/

3.flex-flow属性示例:

  1. flex-direction:column;/*主轴为垂直方向*/
  2. flex-wrap: wrap;/*多行排列*/
  3. /* flex-flow = flex-direction + flex-wrap(简写) */
  4. flex-flow: column wrap;

4.justify-content属性示例:

  1. justify-content:start; /*左对齐*/

  1. justify-content:end; /*右对齐*/

  1. justify-content:end; /*中间对齐*/

5.align-items属性示例:

  1. align-items: flex-start; /*行内上对齐*/

  1. align-items: flex-end; /*行内下对齐*/

  1. align-items: centen; /*行内中对齐*/

6.align-content属性示例:(仅多行有效)

  1. align-content:flex-start; /*多行上对齐*/

  1. align-content:flex-end; /*多行下对齐*/

  1. align-content:center; /*多行中对齐*/

3.2 flex项目6大属性

No 属性 说明
1 order 定义flex子元素出现的顺序。
2 flex-grow 定义项目的放大比例(增长因子)。
3 flex-shrink 定义了项目的缩小比例(缩小因子)。
4 flex-basis 定义了 flex 元素在主轴方向上的初始大小。
5 flex 定义子元素如何分配空间(flex-growflex-shrinkflex-basis 属性的简写。)
6 align-self 定义flex子项单独在侧轴(纵轴)方向上的对齐方式。

1.order属性示例:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>order属性</title>
  7. <style>
  8. .container {
  9. width: 60px;
  10. display: flex;
  11. }
  12. /*将元素重新排序*/
  13. .item1 {order: 4;}
  14. .item2 {order: 3;}
  15. .item3 {order: 2;}
  16. .item4 {order: 1;}
  17. </style>
  18. </head>
  19. <body>
  20. <div class="container">
  21. <div class="item1">1</div>
  22. <div class="item2">2</div>
  23. <div class="item3">3</div>
  24. <div class="item4">4</div>
  25. </div>
  26. </body>
  27. </html>

2.flex-grow属性示例:(增长因子)

  • flex-grow属性定义项目的放大比例。

- HTML DOM结构如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>flex-grow属性</title>
  7. </head>
  8. <body>
  9. <div class="container">
  10. <div class="item">1</div>
  11. <div class="item">2</div>
  12. <div class="item">3</div>
  13. </div>
  14. </body>
  15. </html>

假定container宽度:300px

  • flex-grow: 0;默认值(如果存在剩余空间,也不放大)

  • flex-grow: 1;(等分剩余空间)

  • flex-grow: 2;(放大第三个)

3.flex-shrink属性示例:(收缩因子)

  • flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。

假定container宽度:300px,item宽度150px

  • flex-shrink: 1;默认值(当空间不足时,都将等比例缩小。)

item宽度150px,实际都等比例缩小了,实际宽度为:总宽度300/3=100px

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

4.flex-basis属性:(基础属性)

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

它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间。flex-basis属性优先级大于设定的基础属性。

5.flex属性:

  • flex 属性用于设置或检索弹性盒模型对象的子元素如何分配空间。

  • flex 属性是 flex-growflex-shrinkflex-basis 属性的简写。

6.align-self属性:

  1. align-self:flex-start; /*纵轴方向左对齐*/

  1. align-self:flex-end; /*纵轴方向右对齐*/

  1. align-self:centen; /*纵轴方向中对齐*/

总结:

通过两天的学习,刚开始对flex布局的理解仍然处于懵懂状态,通过自己回放视频,逐个不断调试,终于加深了flex容器的6个属性及项目的6个属性的理解。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议