博客列表 >浮动元素塌陷处理与经典布局

浮动元素塌陷处理与经典布局

new
new原创
2020年06月22日 17:30:24523浏览

1.浮动元素使其父元素高度塌陷与解决方案

  • 我们经常会遇到一种情况,给一个元素设置浮动之后 float:left/right;,如果该元素的父元素有背景颜色,那么会发现父元素的背景颜色消失了;如果父元素有一个边框,那么浮动元素无法将边框撑开。

浮动元素使其父元素高度塌陷示例代码

  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. .container {
  9. border: 3px dashed red;
  10. }
  11. .item {
  12. width: 150px;
  13. height: 150px;
  14. }
  15. .item:first-of-type {
  16. background-color: lightgreen;
  17. }
  18. .item:nth-last-of-type(2) {
  19. background-color: lightcoral;
  20. }
  21. .item:last-of-type {
  22. background-color: lightblue;
  23. }
  24. /* 将三个子元素全部浮动 */
  25. .item {
  26. float: left;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <!-- <div class="box"> -->
  32. <div class="container">
  33. <div class="item">1</div>
  34. <div class="item">2</div>
  35. <div class="item">3</div>
  36. <!-- <div class="clear"></div> -->
  37. </div>
  38. <!-- </div> -->
  39. </body>
  40. </html>

如图

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

示例代码

  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. .container {
  9. border: 3px dashed red;
  10. }
  11. .item {
  12. width: 150px;
  13. height: 150px;
  14. }
  15. .item:first-of-type {
  16. background-color: lightgreen;
  17. }
  18. .item:nth-last-of-type(2) {
  19. background-color: lightcoral;
  20. }
  21. .item:last-of-type {
  22. background-color: lightblue;
  23. }
  24. /* 将三个子元素全部浮动 */
  25. .item {
  26. float: left;
  27. }
  28. /* 解决方案1: 给父元素也添加一个高度 */
  29. /* .container { */
  30. /* height: 150px; */
  31. /* } */
  32. /* 解决方案2: 把父元素也浮动起来 */
  33. /* .container {
  34. float: left;
  35. }
  36. .box {
  37. float: left;
  38. } */
  39. /* 解决方案3: 添加一个专用元素用于清浮动 */
  40. /* div.clear {
  41. clear: both;
  42. } */
  43. /* 解决方案4: 通过添加一个伪元素来解决 */
  44. /* .container::after {
  45. content: "";
  46. display: block;
  47. clear: both;
  48. } */
  49. /* 解决方案5: 最简单的解决方案,用到BFC(块级格式化上下文) */
  50. .container {
  51. /* overflow: hidden; */
  52. overflow: auto;
  53. }
  54. </style>
  55. </head>
  56. <body>
  57. <div class="container">
  58. <div class="item">1</div>
  59. <div class="item">2</div>
  60. <div class="item">3</div>
  61. </div>
  62. </body>
  63. </html>

如图

2.浮动实现三列布局

  • 示例代码
  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. margin: 0;
  10. padding: 0;
  11. }
  12. .header,
  13. .footer {
  14. width: 960px;
  15. height: 50px;
  16. background: red;
  17. margin: 0 auto;
  18. }
  19. .main {
  20. height: 600px;
  21. width: 960px;
  22. margin: 10px auto;
  23. }
  24. .left,
  25. .right {
  26. min-width: 190px;
  27. min-height: 600px;
  28. background: rgb(40, 231, 14);
  29. }
  30. .main>* {
  31. float: left;
  32. }
  33. .content {
  34. min-width: 560px;
  35. min-height: 600px;
  36. background: rgb(29, 1, 27);
  37. margin: 0 10px;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <!-- 头部 -->
  43. <div class="header"></div>
  44. <!-- 主体 -->
  45. <div class="main">
  46. <div class="left"></div>
  47. <div class="content"></div>
  48. <div class="right"></div>
  49. </div>
  50. <!-- 尾部 -->
  51. <div class="footer"></div>
  52. </body>
  53. </html>

如图

3.圣杯布局,两边固定,中间自适应。

  • 示例代码
  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. margin: 0;
  10. padding: 0;
  11. }
  12. .header,
  13. .footer {
  14. width: 960px;
  15. height: 50px;
  16. background: rgb(144, 238, 230);
  17. margin: 0 auto;
  18. }
  19. .main {
  20. height: 600px;
  21. width: 960px;
  22. margin: 10px auto;
  23. }
  24. .left,
  25. .right {
  26. width: 190px;
  27. height: 600px;
  28. background: rgb(255, 211, 181);
  29. }
  30. .main>* {
  31. float: left;
  32. }
  33. .left {
  34. margin-left: -100%;
  35. }
  36. .right {
  37. margin-left: -190px;
  38. position: relative;
  39. top: 0;
  40. }
  41. .content {
  42. width: 100%;
  43. height: 600px;
  44. background: rgb(238, 175, 235);
  45. padding: 0 -200px;
  46. }
  47. </style>
  48. </head>
  49. <body>
  50. <!-- 头部 -->
  51. <div class="header"></div>
  52. <!-- 主体 -->
  53. <div class="main">
  54. <div class="content"></div>
  55. <div class="left"></div>
  56. <div class="right"></div>
  57. </div>
  58. <!-- 尾部 -->
  59. <div class="footer"></div>
  60. </body>
  61. </html>

如图

4.用grid网格布局

  • 示例代码
  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. body {
  9. display: grid;
  10. grid-template-columns: 200px 1fr 200px;
  11. grid-template-rows: 40px 500px 40px;
  12. }
  13. /* 轮廓线 */
  14. body>* {
  15. outline: 1px dashed red;
  16. }
  17. .header,
  18. .footer {
  19. grid-column-end: span 4;
  20. }
  21. </style>
  22. </head>
  23. <body>
  24. <!-- 头部 -->
  25. <div class="header"></div>
  26. <!-- 主体 -->
  27. <div class="content"></div>
  28. <div class="left"></div>
  29. <div class="right"></div>
  30. <!-- 尾部 -->
  31. <div class="footer"></div>
  32. </body>
  33. </html>

如图

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