Blogger Information
Blog 8
fans 1
comment 0
visits 8877
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
浮动元素高度塌陷产生的原因与解决方案
BigPig
Original
910 people have browsed it

浮动元素高度坍塌的产生

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

  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>

效果如下:

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

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

Correcting teacher:WJWJ

Correction status:qualified

Teacher's comments:写的很认真仔细!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post