CSS中flex布局

忘是亡心i 2023-06-20 10:49 59阅读 0赞

flex布局,也称为弹性盒子布局,这是一种简单而强大的布局方式,我们通过弹性盒指明控件的分布方式、内容的对齐方式和元素的排布顺序,把不同的组件放置在页面中,内容可以轻易的横向或者是纵向的进行排布。

基本属性

flex依赖父子元素,在元素上声明display:flex或者display:inline-flex便可以激活弹性和子布局,而这个元素称之为弹性容器,弹性容器下面的子元素就是弹性盒子布局元素。但是这两种方式还是有点区别的,display:flex;布局的方式创造一个块级盒子容器,而display:inline-flex;创建了一个行内块级元素容器,就像块级元素和行内块级元素的区别。

代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>flex布局</title>
  6. <script type="text/javascript" src="../jquery/jquery.min.js"></script>
  7. <style type="text/css">
  8. *{
  9. margin:0;
  10. padding: 0;
  11. }
  12. #one{
  13. border: 1px solid red;
  14. display: flex;
  15. height: 200px;
  16. }
  17. #one div{
  18. margin-left:30px;
  19. background: blue
  20. }
  21. #two{
  22. border: 1px solid green;
  23. display: inline-flex;
  24. height: 200px;
  25. margin-top: 50px
  26. }
  27. #two div{
  28. margin-left:30px;
  29. background: yellow;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div id="one">
  35. <div>我们都是一家人</div>
  36. <div>我们都是一家人</div>
  37. </div>
  38. <div id="two">
  39. <div>我们都是一家人</div>
  40. <div>我们都是一个家庭</div>
  41. </div>
  42. </body>
  43. </html>

效果如下:

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70

1、flex-direction属性

flex-direction:row(默认) | row-reverse | column | column-reverse

这几个属性分别代表容器内元素的排布方向:横向从左到右、横向从右到左、纵向从上到下、纵向从下到上;

示例如图:

flex-direction:row(默认);(默认为水平从左到右方向排布)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 1

flex-direction:row-reverse;(从右向左排布)

" class="reference-link">watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 2

flex-direction:column;(从上到下排布)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 3

flex-direction:column-reverse;(从下到上排布)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 4

2、换行flex-wrap属性和元素宽度是否根据父元素自行缩减

flex-wrap:nowrap(默认) | wrap | wrap-reverse;父元素

flex-shrink:0 | 1(默认缩减);子元素

换行这个属性在元素超出容器内部空间的时候就会有作用,默认显示在一行,不换行,如果容器内部元素超出容器空间大小就会被隐藏,这时候就应该设置换行属性。

flex-wrap:nowrap; flex-shrink:1;(子元素不换行,并且随着父元素自动缩减子元素内容宽度)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 5

flex-wrap:nowrap; flex-shrink:0;(子元素不换行,但是不跟随父元素进行元素内容宽度缩减,这样就会导致子元素超出容器)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 6

flex-wrap:wrap; flex-shrink:0;(子元素换行,但是不随父元素宽度进行内容缩减)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 7

flex-wrap:wrap-reverse; flex-shrink:0;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 8

3、flex-flow属性

flex-flow是flex-direction和flex-wrap的缩写属性

如:flex-flow:row wrap;flex-shrink:0;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 7

4、justify-content属性

justify-content属性指明在弹性容器的主轴上如何分布各行里面的弹性元素,说白点也就是进行元素排布位置。

justify-content:flex-start(默认值排布在主轴起边) | flex-end | center | space-between | space-around | space-evenly

justify-content:flex-start;(以横向排列为例,排列在主轴起边)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 9

justify-content:flex-end;(排列方向为主轴终边)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 10

justify-content:center;(排列为在主轴中点两侧排布)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 11

justify-content:space-between;(排布为每一行第一个元素放在起边,每行最后一个元素放在终边,然后把相邻的元素之间的空白调整平均,也就是始末靠边元素之间间隔分布)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 12

justify-content:space-around;(这样的分布是设置每个元素两边的空白部分平均,都相当于有两侧外边距且边距相同,但是相邻两个元素之间的距离随即扩大)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 13

justify-content:space-evenly;(这样分布是使得每个元素周围的空白空间都是一样的大小,等均分布)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 14

5、align-items属性

align-items属性是在垂轴的方向上进行弹性元素的排布

align-items:flex-start | flex-end | center | baseline | stretch(默认)

align-items:flex-start;(垂轴初始边对齐)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 15

align-items:flex-end;(垂轴终边对齐)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 16

align-items:center;(垂轴中心线对齐)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 17

align-item: baseline;(中心线—基线对齐)

这个属性基线对齐是指的是当弹性元素内容不同的时候,会以弹性元素第一行内容的底部基线进行对齐,对齐的标准就是内容离弹性容器最远的为基准。

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 18

6、align-content属性

align-content属性值得是垂轴方向上的空间和弹性元素的位置分配,一般适用于多行显示的弹性容器

align-content:stretch(默认) | flex-start | flex-end | center | space-between | space-around | space-evenly

align-content:stretch

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 19

align-content:flex-start;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 20

align-content:flex-end;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 21

align-content:center;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 22

align-content:space-between;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 23

align-content:space-around;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 24

align-content:space-enevly;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 25

以上都是对弹性容器的操作,下面这个属性是对弹性容器中弹性元素的操作

7、align-self属性

align-self属性是单独对容器中的弹性元素进行设置垂直轴对齐方式。也就是单独为弹性元素设置align-items属性

align-self:auto(默认值) | flex-start | flex-end | center | baseline | stretch

align-self:auto(默认值auto:弹性元素继承父元素的align-items属性)

当我们对第二个弹性元素进行设置该属性的时候,如下:默认继承父元素的align-items:stretch;属性

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 26

align-self:flex-start;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 27

align-self:flex-end;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 28

align-self:center;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 29

align-self:baseline;(元素位于容器的基线上。如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。其它情况下,该值将参与基线对齐)

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 30

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 31

align-self:stretch;

watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjkzMTgyNQ_size_16_color_FFFFFF_t_70 26

8、flex-grow属性

flex-grow:number | 0(默认值)

flex-grow属性定义有多余的空间时是否允许弹性元素增大,以及允许这部分大且有多余的空间是。相对其他同辈的弹性元素一什么比例增大。

举个例子说明:有一个宽度750px的弹性容器,里面有三个弹性元素,且都设置宽度100px;因此剩余的空间为450px,所以flex-grow属性就是决定如何分配这450px空间的。

正常情况下:默认每一个弹性元素的flex-grow:0;所以空白部分不会分配

20191217135713114.png

1)设置弹性容器中第二个弹性元素flex-grow:1;其他的不设置,这时第二个div宽度=100px+450px*1=550px;

20191217140045609.png

2)设置弹性容器中第一个和第二个元素的flex-grow值为1和2,此时第一个div的宽度=100px+450px*(1/3)=250px;第二个div的宽度=100px+450px*(2/3)=400px;这时弹性容器内剩余的空间就会按比例分配,多个的时候也是一样,根据设置的flex-grow的值得和进行比例分配。

20191217140521547.png

9、flex-shrink属性

flex-shrink属性是当前弹性容器不允许弹性元素自动换行的情况下,且弹性元素超出弹性容器空间,这时候就要通过缩减因子使得容器可以装下所有的元素

flex-shrink:1(默认值,默认为缩减) 0(不缩减) 其他值number(缩减比例);

flex-shrink:0;(弹性元素不缩减)

20191231104410583.png

flex-shrink:1;(默认缩减比例为1:1:1)

" class="reference-link">20191231105056288.png

flex-shrink:number(其他值)(缩减比例为1:1:3)这时设置宽度为wid=300px;超出容器的宽度,这是候应该把超出的部分按照1:1:3比例在每一个容器元素上缩减。

20191231105633528.png

这样三个容器的宽度一次是:270px 270px 210px;

以上就是常用的flex盒子布局属性,有什么缺少的,希望可以多多提出意见。

发表评论

表情:
评论列表 (有 0 条评论,59人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CSS-Flex布局

    01-标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 ![\[外链图片转存失败,源站可能有防盗链机制,建议

    相关 CSSflex布局

    flex布局,也称为弹性盒子布局,这是一种简单而强大的布局方式,我们通过弹性盒指明控件的分布方式、内容的对齐方式和元素的排布顺序,把不同的组件放置在页面中,内容可以轻易的横向或

    相关 css3-flex布局

    第1章 flex布局 Flex布局(伸缩布局盒模型)是CSS3提出的一种新的布局方案,可以简便、完整、响应式地实现各种页面布局。 任何一个容器都可以指定为F

    相关 CSS-flex布局

    参考博文:[阮一峰][Link 1] Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性。 开启开启伸缩盒模display: fle

    相关 CSS3flex布局

    本文笔记基于「千古壹号」的GitHub项目:https://github.com/qianguyihao/web 非商业用途自由转载,保持署名,注明出处! -------