CSS-flex布局

桃扇骨 2022-05-24 04:13 320阅读 0赞

参考博文:阮一峰

Flexbox,一种CSS3的布局模式,也叫做弹性盒子模型,用来为盒装模型提供最大的灵活性。

开启开启伸缩盒模display: flex;开启伸缩盒模型的盒子称为容器。容器中的包含的元素称为项目。

注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。

flex布局图片

main axis 称为水平的主轴

cross axis 称为垂直的主轴

设置在容器上的属性

1:flex-direction 决定项目在主轴上的方向

row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。

  1. <body >
  2. <div class='head'>
  3. <div class='test1'></div>
  4. <div class='test2'></div>
  5. <div class='test3'></div>
  6. </div>
  7. </body>
  8. html body{
  9. padding:0px;
  10. margin:0px;
  11. }
  12. .head{
  13. display:flex;
  14. width:500px;
  15. height:200px;
  16. flex-direction:row;
  17. background:lightblue;
  18. }
  19. .test1{
  20. width:30px;
  21. height:30px;
  22. background:red;
  23. }
  24. .test2{
  25. width:30px;
  26. height:30px;
  27. background:green;
  28. }
  29. .test3{
  30. width:30px;
  31. height:30px;
  32. background:white;
  33. }

70flex-direction:row;70 1 flex-direction:row-reverse;

70 2 flex-direction:column;70 3 flex-direction:column-reverse;

2:justify-content 决定项目在主轴上的对齐方法

flex-start(默认值):左对齐
flex-end:右对齐
center: 居中
space-between:两端对齐,项目之间的间隔都相等。

space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

  1. .head{
  2. display:flex;
  3. width:500px;
  4. height:200px;
  5. flex-direction:row;
  6. justify-content:flex-start;
  7. background:lightblue;
  8. }

70 4justify-content:flex-start;70 5justify-content:flex-end;和flex-direction:row-reverse比较一下

70 6justify-content:center70 7

justify-content:space-between;

70 8

justify-content:space-around;

3:align-items 定义在交叉轴上的对其方法

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

  1. .head{
  2. display:flex;
  3. width:500px;
  4. height:200px;
  5. align-items:flex-start;
  6. background:lightblue;
  7. }

70 9align-items:flex-start;70 10align-items:flex-end;70 11 align-items:center;

70 12我去掉test1的height属性值.

4:flex-wrap属性 默认情况下是在一排的,而且不会超过盒子,只是会压缩盒子大小,那么这个属性就是解决这个问题的。

nowrap(默认):不换行。

wrap:换行,第一行在上方。

wrap-reverse:换行,第一行在下方。

我们看一下如下代码,就明白了。

  1. <body >
  2. <div class='head'>
  3. <div class='test1'>1</div>
  4. <div class='test2'>2</div>
  5. <div class='test3'>3</div>
  6. <div class='test4'>4</div>
  7. </div>
  8. </body>
  9. html body{
  10. padding:0px;
  11. margin:0px;
  12. }
  13. .head{
  14. display:flex;
  15. width:100px;
  16. height:200px;
  17. flex-wrap:nowrap;
  18. background:lightblue;
  19. }
  20. .test1{
  21. width:30px;
  22. height:30px;
  23. background:red;
  24. }
  25. .test2{
  26. width:30px;
  27. height:30px;
  28. background:green;
  29. }
  30. .test3{
  31. width:30px;
  32. height:30px;
  33. background:white;
  34. }
  35. .test4{
  36. width:30px;
  37. height:30px;
  38. background:yellow;
  39. }

70 13四个div的width大于父级div的宽度,但是没有溢出,内部div被压缩了,换上flex-wrap:wrap

70 14换行了,但是为什么没有连在一起了?这个和下一个属性有关,现在我们知道可以换行就可以了。

5:align-content属性 它定义了如果存在多根轴线的情况,如果只有一根轴线,那么没有作用。

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

  1. <body >
  2. <div class='head'>
  3. <div class='test1'>1</div>
  4. <div class='test2'>2</div>
  5. <div class='test3'>3</div>
  6. <div class='test4'>4</div>
  7. <div class='test5'>5</div>
  8. <div class='test6'>6</div>
  9. <div class='test7'>7</div>
  10. </div>
  11. </body>
  12. html body{
  13. padding:0px;
  14. margin:0px;
  15. }
  16. .head{
  17. display:flex;
  18. width:100px;
  19. height:200px;
  20. flex-wrap:wrap;
  21. align-content:stretch;
  22. background:lightblue;
  23. }
  24. .test1{
  25. width:30px;
  26. background:red;
  27. }
  28. .test2{
  29. width:30px;
  30. height:30px;
  31. background:green;
  32. }
  33. .test3{
  34. width:30px;
  35. height:30px;
  36. background:white;
  37. }
  38. .test4{
  39. width:30px;
  40. height:30px;
  41. background:yellow;
  42. }
  43. .test5{
  44. width:30px;
  45. height:30px;
  46. background:orange;
  47. }
  48. .test6{
  49. width:30px;
  50. height:30px;
  51. background:black;
  52. }
  53. .test7{
  54. width:30px;
  55. height:30px;
  56. background:gray;
  57. }

70 15stretch(默认值)父级div被分成三块,没有设置hight的项目会占满。

70 16flex-start 70 17flex-end 70 18center70 19space-between(与stretch比较)70 20space-around

设置在项目上的属性

1:order属性 定义项目的排列顺序,小的在前面,默认值为0。

  1. <body >
  2. <div class='head'>
  3. <div class='test1'>1</div>
  4. <div class='test2'>2</div>
  5. <div class='test3'>3</div>
  6. <div class='test4'>4</div>
  7. <div class='test5'>5</div>
  8. <div class='test6'>6</div>
  9. </div>
  10. </body>
  11. html body{
  12. padding:0px;
  13. margin:0px;
  14. }
  15. .head{
  16. display:flex;
  17. width:100px;
  18. height:200px;
  19. background:lightblue;
  20. }
  21. .test1{
  22. width:30px;
  23. height:30px;
  24. background:red;
  25. order:6;
  26. }
  27. .test2{
  28. width:30px;
  29. height:30px;
  30. background:green;
  31. order:5;
  32. }
  33. .test3{
  34. width:30px;
  35. height:30px;
  36. background:white;
  37. order:4;
  38. }
  39. .test4{
  40. width:30px;
  41. height:30px;
  42. background:yellow;
  43. order:3;
  44. }
  45. .test5{
  46. width:30px;
  47. height:30px;
  48. background:orange;
  49. order:2;
  50. }
  51. .test6{
  52. width:30px;
  53. height:30px;
  54. background:gray;
  55. order:1;
  56. }

70 21order赋值从大到小后的效果,项目的排序方法倒过来了。

2:flex-grow属性:项目放大的比例,默认为0,即有剩余空间也不放大。

3:flex-shrink属性:项目缩小的比例,默认为1,即有空间不足那么按比例缩小。

我们以flex-shrink属性为例。

  1. <body >
  2. <div class='head'>
  3. <div class='test1'>1</div>
  4. <div class='test2'>2</div>
  5. <div class='test3'>3</div>
  6. <div class='test4'>4</div>
  7. <div class='test5'>5</div>
  8. <div class='test6'>6</div>
  9. </div>
  10. </body>
  11. html body{
  12. padding:0px;
  13. margin:0px;
  14. }
  15. .head{
  16. display:flex;
  17. width:100px;
  18. height:200px;
  19. background:lightblue;
  20. }
  21. .test1{
  22. width:30px;
  23. height:30px;
  24. background:red;
  25. flex-shrink:2;
  26. }
  27. .test2{
  28. width:30px;
  29. height:30px;
  30. background:green;
  31. flex-shrink:2;
  32. }
  33. .test3{
  34. width:30px;
  35. height:30px;
  36. background:white;
  37. flex-shrink:2;
  38. }
  39. .test4{
  40. width:30px;
  41. height:30px;
  42. background:yellow;
  43. }
  44. .test5{
  45. width:30px;
  46. height:30px;
  47. background:orange;
  48. }
  49. .test6{
  50. width:30px;
  51. height:30px;
  52. background:gray;
  53. }

70 22我们把前面三个的flex-shrink变成2,那么因为空间不足缩小的时候前面三个缩小的是后面三个的俩倍。

4:align-self属性 这个属性可以运行这个项目与其他的不一样,可以覆盖align-items.默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

  1. <body >
  2. <div class='head'>
  3. <div class='test1'>1</div>
  4. <div class='test2'>2</div>
  5. <div class='test3'>3</div>
  6. <div class='test4'>4</div>
  7. <div class='test5'>5</div>
  8. <div class='test6'>6</div>
  9. </div>
  10. </body>
  11. html body{
  12. padding:0px;
  13. margin:0px;
  14. }
  15. .head{
  16. display:flex;
  17. width:100px;
  18. height:200px;
  19. background:lightblue;
  20. align-items:flex-start;
  21. }
  22. .test1{
  23. width:30px;
  24. height:30px;
  25. background:red;
  26. align-self:flex-end;
  27. }
  28. .test2{
  29. width:30px;
  30. height:30px;
  31. background:green;
  32. align-self:center;
  33. }
  34. .test3{
  35. width:30px;
  36. height:30px;
  37. background:white
  38. }
  39. .test4{
  40. width:30px;
  41. height:30px;
  42. background:yellow;
  43. }
  44. .test5{
  45. width:30px;
  46. height:30px;
  47. background:orange;
  48. align-self:center;
  49. }
  50. .test6{
  51. width:30px;
  52. height:30px;
  53. background:gray;
  54. align-self:flex-end;
  55. }

70 23我们在父级设置了align-items:flex-start ,各个项目也继承了这个属性,但是项目自身的align-self可以覆盖这个属性。

发表评论

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

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

相关阅读

    相关 css - 布局 - rem布局

    物理像素 物理像素是屏幕设备的尺寸单位,在不同的设备中1px里可以容纳的像素颗粒是不相同的,所以1px这个单位其实也是有N个像素颗粒填充的。同一尺寸屏幕的每个像素点所能容

    相关 常见布局—弹性布局

    在常见的布局中,通常有一部分是固定高度,而其他部分是剩余大小分配的,这种情况我们可以使用弹性布局。 说到弹性布局,就得介绍一下css属性中的弹性盒——display:flex