博客列表 >浮动元素高度坍塌原因及解决方案与三列布局

浮动元素高度坍塌原因及解决方案与三列布局

Haggi的糖果屋
Haggi的糖果屋原创
2020年06月21日 17:56:41747浏览

一浮动

浮动基本特征

1.元素浮动之后从文档流中脱离出来(会释放它原来在文档流中占据的空间)
2.后面的元素会自动填充它出让出来的空间大小
3.浮动元素只会影响到它后面的元素布局,对前面没有影响
4.行内元素用于最终内容的载体, 不能充当容器/当父级,不能设置或设置了宽高也是无效的。例如a、p元素等
5.任何元素,一旦浮动都自动转为块级元素

高度坍塌及解决方案

高度坍塌:
父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度,从而导致父元素的高度塌陷
运行图:

解决方案:
1.给父元素也添加一个高度

CSS代码:

  1. .container {
  2. height: 150px;
  3. }

运行结果图:

2.把父元素也浮动起来
CSS代码:

  1. .container {
  2. float: left;
  3. }

运行结果图:

3.添加一个专用元素用于清浮动
CSS代码:

  1. .clear {
  2. width: 100px;
  3. height: 100px;
  4. background-color: brown;
  5. clear: both;

运行结果图:

4.通过添加一个伪元素来解决
CSS代码:

  1. .container::after {
  2. content: "伪元素";
  3. display: block;
  4. clear: both;

运行结果图:

5.块级格式化上下文
CSS代码:

  1. .container {
  2. overflow: scroll;
  3. /* 默认值:overflow: auto; */
  4. }

运行结果图:


二、三列布局

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. /* 固定块级元素宽高,避免边框、内边距增长而增长 */
  13. box-sizing: border-box;
  14. }
  15. li {
  16. list-style: none;
  17. }
  18. a {
  19. text-decoration: none;
  20. color: whitesmoke;
  21. }
  22. /* 页眉与页脚 */
  23. .header,
  24. .footer {
  25. height: 40px;
  26. width: 100%;
  27. background-color: black;
  28. color: whitesmoke;
  29. margin: auto;
  30. }
  31. /* 页眉与页脚的内容区 */
  32. .content {
  33. width: 100%;
  34. }
  35. .content ul li {
  36. float: left;
  37. line-height: 40px;
  38. padding: 0 15px;
  39. }
  40. .content ul li:hover {
  41. background-color: coral;
  42. }
  43. /* 页脚样式 */
  44. .content p {
  45. text-align: right;
  46. line-height: 40px;
  47. }
  48. /* 主体用定位 */
  49. .container {
  50. width: 960px;
  51. margin: 10px auto;
  52. /* background-color: #ccc; */
  53. min-height: 600px;
  54. /* 转为定位元素,做为定位父级 */
  55. position: relative;
  56. }
  57. .container > .left {
  58. width: 20%;
  59. background-color: gray;
  60. min-height: 600px;
  61. position: absolute;
  62. top: 0;
  63. left: 0;
  64. }
  65. .container > .right {
  66. width: 20%;
  67. background-color: red;
  68. min-height: 600px;
  69. position: absolute;
  70. top: 0;
  71. right: 0;
  72. }
  73. .container > .main {
  74. background-color: limegreen;
  75. min-height: 600px;
  76. width: 58%;
  77. position: absolute;
  78. top: 0;
  79. left: 21%;
  80. }
  81. </style>
  82. </head>
  83. <body>
  84. <!-- 页眉 -->
  85. <div class="header">
  86. <!-- 内容区: 水平居中 -->
  87. <div class="content">
  88. <ul>
  89. <li><a href="">导航栏</a></li>
  90. <li><a href="">模块一</a></li>
  91. <li><a href="">模块二</a></li>
  92. <li><a href="">模块三</a></li>
  93. <li><a href="">模块四</a></li>
  94. <li><a href="">模块五</a></li>
  95. </ul>
  96. </div>
  97. </div>
  98. <!-- 主体 -->
  99. <div class="container">
  100. <div class="left">左侧边栏</div>
  101. <div class="main">内容区</div>
  102. <div class="right">右侧边栏</div>
  103. </div>
  104. <!-- 页脚 -->
  105. <div class="footer">
  106. <div class="content">
  107. <p>底部:欢迎来到PHP世界</p>
  108. </div>
  109. </div>
  110. </body>
  111. </html>

结果图:

2.浮动

部分css代码:

  1. .container {
  2. width: 100%;
  3. margin: 10px auto;
  4. /* background-color: #ccc; */
  5. min-height: 600px;
  6. /* 防止浮动元素的高度塌陷 */
  7. overflow: auto;
  8. }
  9. .container > .left {
  10. width: 20%;
  11. background-color: wheat;
  12. min-height: 600px;
  13. float: left;
  14. }
  15. .container > .right {
  16. width: 20%;
  17. background-color: wheat;
  18. min-height: 600px;
  19. float: right;
  20. }
  21. .container > .main {
  22. background-color: lightgreen;
  23. min-height: 600px;
  24. width: 58%;
  25. float: left;
  26. margin-left: 1%;
  27. }

结果图

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