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

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

多喝水
多喝水原创
2020年06月22日 17:47:29664浏览

一、浮动的基本特征

  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>浮动的基本特征</title>
  7. </head>
  8. <style>
  9. .box{
  10. width: 200px;
  11. height: 200px;
  12. }
  13. .box1{
  14. background-color: lightblue;
  15. }
  16. .box2{
  17. background-color: lightcoral;
  18. float: left;
  19. }
  20. .box3{
  21. background-color: lightgreen;
  22. width: 230px;
  23. height: 230px;
  24. }
  25. a,span{
  26. background-color: yellow;
  27. width: 200px;
  28. height: 50px;
  29. float: left;
  30. }
  31. </style>
  32. <body>
  33. <div class="box box1">box1</div>
  34. <div class="box box2">box2</div>
  35. <div class="box box3">box3</div>
  36. <hr/>
  37. <a href="">php.cn</a>
  38. <span>PHP中文网欢迎</span>
  39. </body>
  40. </body>
  41. </html>

知识点:
1.box2浮动之后从文档流中脱离出来(意思就是会释放它原来在文档流中占据的空间)
2.浮动元素浮动之后,它后面的元素会自动填充它让出来空间的大小
3.浮动元素只会影响它后面的元素布局,对前面没有影响
4.行内元素用于最终内容的载体,不能充当容器/父级,不能设置宽高也是无效的
5.任何元素,一旦浮动都自动转为块级元素
6.不让它收到前面的浮动元素影响:clear:both
浮动元素只能水平方向浮动
浮动元素的浮动边界仅限于内容区

二、浮动元素的塌陷与解决方案

浮动塌陷和解决方法:

解决方案1:给父元素添加一个高度,但是此方法无法自适应.
解决方案2:把父元素浮动起来 ,会产生传导效应,级数越多很麻烦.
解决方案3: 添加一个专用元素用于清浮动 ,但依赖DOM结构
解决方案4: 添加一个伪元素来解决,也可以
解决方案5: 最简单的解决方案,加overflow属性(hidden/auto)

三、经典3列布局示例

1.使用定位完成一个三列经典布局


代码如下:

  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>布局实例:使用绝对定位来完成一个通用三列布局</title>
  7. <style>
  8. /* 初始化 */
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. li {
  15. list-style: none;
  16. }
  17. a {
  18. text-decoration: none;
  19. color: #666;
  20. }
  21. /* 页眉与页脚 */
  22. .header,
  23. .footer {
  24. height: 40px;
  25. background-color: lightsteelblue;
  26. }
  27. .content {
  28. width: 960px;
  29. margin: auto;
  30. }
  31. .content ul li {
  32. float: left;
  33. line-height: 40px;
  34. padding: 0 15px;
  35. }
  36. .content ul li:hover {
  37. background-color: lightcoral;
  38. }
  39. /* 页脚 */
  40. .content p {
  41. text-align: center;
  42. line-height: 40px;
  43. }
  44. /* 主体用定位来做 */
  45. .container {
  46. width: 960px;
  47. margin: 10px auto;
  48. min-height: 600px;
  49. /* 定位做的,转为定位元素,父级 */
  50. position: relative;
  51. }
  52. .container > .left {
  53. width: 200px;
  54. background-color: navajowhite;
  55. min-height: 600px;
  56. position: absolute;
  57. top: 0;
  58. left: 0;
  59. }
  60. .container > .right {
  61. width: 200px;
  62. background-color: navajowhite;
  63. min-height: 600px;
  64. position: absolute;
  65. top: 0;
  66. right: 0;
  67. }
  68. .container > .main {
  69. background-color: lightgreen;
  70. min-height: 600px;
  71. width: 540px;
  72. position: absolute;
  73. top: 0;
  74. left: 210px;
  75. }
  76. </style>
  77. </head>
  78. <body>
  79. <!-- 页眉 -->
  80. <div class="header">
  81. <div class="content">
  82. <ul>
  83. <li><a href="">首页</a></li>
  84. <li><a href="">会场</a></li>
  85. <li><a href="">售后</a></li>
  86. </ul>
  87. </div>
  88. </div>
  89. <!-- 主体 -->
  90. <div class="container">
  91. <div class="left">左边</div>
  92. <div class="main">中间</div>
  93. <div class="right">右边</div>
  94. </div>
  95. <!-- 页脚 -->
  96. <div class="footer">
  97. <div class="content">
  98. <p>教育科技有限公司&copy; | 闵备案号:*******</p>
  99. </div>
  100. </div>
  101. </body>
  102. </html>

2.使用浮动完成一个三列经典布局,防止浮动元素塌陷用overflow: hidden

  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>布局实例:使用浮动来完成一个通用三列布局</title>
  7. <style>
  8. /* 初始化 */
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. li {
  15. list-style: none;
  16. }
  17. a {
  18. text-decoration: none;
  19. color: #666;
  20. }
  21. /* 页眉与页脚 */
  22. .header,
  23. .footer {
  24. height: 40px;
  25. background-color: lightsteelblue;
  26. }
  27. .content {
  28. width: 960px;
  29. margin: auto;
  30. }
  31. .content ul li {
  32. float: left;
  33. line-height: 40px;
  34. padding: 0 15px;
  35. }
  36. .content ul li:hover {
  37. background-color: limegreen;
  38. }
  39. /* 页脚 */
  40. .content p {
  41. text-align: center;
  42. line-height: 40px;
  43. }
  44. /* 主体用定位来做 */
  45. .container {
  46. width: 960px;
  47. margin: 10px auto;
  48. min-height: 600px;
  49. /* 防止浮动元素塌陷 */
  50. overflow: hidden;
  51. }
  52. .container > .left {
  53. width: 200px;
  54. background-color: navajowhite;
  55. min-height: 600px;
  56. float: left;
  57. }
  58. .container > .right {
  59. width: 200px;
  60. background-color: navajowhite;
  61. min-height: 600px;
  62. float: right;
  63. }
  64. .container > .main {
  65. background-color: plum;
  66. min-height: 600px;
  67. width: 540px;
  68. float: left;
  69. margin-left: 10px;
  70. }
  71. </style>
  72. </head>
  73. <body>
  74. <!-- 页眉 -->
  75. <div class="header">
  76. <div class="content">
  77. <ul>
  78. <li><a href="">首页</a></li>
  79. <li><a href="">会场</a></li>
  80. <li><a href="">售后</a></li>
  81. </ul>
  82. </div>
  83. </div>
  84. <!-- 主体 -->
  85. <div class="container">
  86. <div class="left"></div>
  87. <div class="main"></div>
  88. <div class="right"></div>
  89. </div>
  90. <!-- 页脚 -->
  91. <div class="footer">
  92. <div class="content">
  93. <p>教育科技有限公司&copy; | 闵备案号:*******</p>
  94. </div>
  95. </div>
  96. </body>
  97. </html>

总结

通过学习,对浮动产生的影响有了更深的理解,新的知识点overflow: hidden,掌握定位的使用

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