博客列表 >浮动元素高度塌陷产生的原因与解决方案

浮动元素高度塌陷产生的原因与解决方案

BigPig
BigPig原创
2020年06月21日 23:52:26895浏览

浮动元素高度坍塌的产生

一个或多个元素使用了浮动,那便意味着该元素已经脱离了文档流,释放了该元素在文档流中的位置,父级元素将不能把子级漂浮元素包裹住,从而后面的元素代替了前面漂浮的元素释放了位置,造成因为浮动导致后面的元素顶替变成布局错乱。这便是高度坍塌。例如:

  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>Document</title>
  7. <style>
  8. .day-float {
  9. border: 3px dashed red;
  10. }
  11. .float {
  12. width: 200px;
  13. height: 200px;
  14. float: left;
  15. }
  16. .float:first-of-type {
  17. background-color: chartreuse;
  18. }
  19. .float:nth-child(2) {
  20. background-color: cyan;
  21. }
  22. .float:last-of-type {
  23. background-color: palegreen;
  24. }
  25. </style>
  26. </head>
  27. <body>
  28. <div class="day-float">
  29. <div class="float">1</div>
  30. <div class="float">2</div>
  31. <div class="float">3</div>
  32. </div>
  33. </body>
  34. </html>

当把元素漂浮以后,便会发现父级div无法将子级div包裹,原因是所有的子级元素全部已经设置漂浮,脱离了文档流。要解决高度坍塌我们需要让父级div包裹住所有浮动的子元素,这样后面的元素才不会跑到被文档流释放的位置。要解决高度坍塌有2种最快捷方便的方法。

第一种方法:使用伪元素来解决高度坍塌

我们需要用到::after伪元素,::after是在元素后添加一些由浏览器生成的内容,
不会被选中,也不会在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>Document</title>
  7. <style>
  8. .day-float {
  9. border: 3px dashed red;
  10. }
  11. .float {
  12. width: 200px;
  13. height: 200px;
  14. float: left;
  15. }
  16. .float:first-of-type {
  17. background-color: chartreuse;
  18. }
  19. .float:nth-child(2) {
  20. background-color: cyan;
  21. }
  22. .float:last-of-type {
  23. background-color: palegreen;
  24. }
  25. /*这里我们在漂浮div的父级元素中添加::after,不在浏览器中打印内容,设置为块状,清除全部浮动。*/
  26. .day-float::after {
  27. content: "";
  28. display: block;
  29. clear: both;
  30. }
  31. </style>
  32. </head>
  33. <body>
  34. <div class="day-float">
  35. <div class="float">1</div>
  36. <div class="float">2</div>
  37. <div class="float">3</div>
  38. </div>
  39. <div>123456789</div>
  40. </body>
  41. </html>

效果如下:

由图可见,浮动元素的父级div已经将全部浮动元素包裹起来,下面的元素与元素内容不会跑到被释放的空间上面去。这是第一种清楚高度坍塌的方法,下面为大家介绍第二种。

第二种方法:BFC(使用块级格式化上下文)

需要用到css属性的overflow: auto;(因为这玩意涉及到高级css原理,及其深奥,所以我也只会用不会说,想了解的自行百度即可)代码如下:

  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>Document</title>
  7. <style>
  8. .day-float {
  9. border: 3px dashed red;
  10. }
  11. .float {
  12. width: 200px;
  13. height: 200px;
  14. float: left;
  15. }
  16. .float:first-of-type {
  17. background-color: chartreuse;
  18. }
  19. .float:nth-child(2) {
  20. background-color: cyan;
  21. }
  22. .float:last-of-type {
  23. background-color: palegreen;
  24. }
  25. /* .day-float::after {
  26. content: "";
  27. display: block;
  28. clear: both;
  29. } */
  30. /*直接将overflow: auto;作用到浮动元素的父级div上即可*/
  31. .day-float {
  32. overflow: auto;
  33. }
  34. </style>
  35. </head>
  36. <body>
  37. <div class="day-float">
  38. <div class="float">1</div>
  39. <div class="float">2</div>
  40. <div class="float">3</div>
  41. </div>
  42. <div>123456789</div>
  43. </body>

效果如下:

这样也可以解决高度坍塌的问题!

以上就是两种就是可以最快捷便利解决高度坍塌的方法!

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