博客列表 >了解浮动和其网页布局

了解浮动和其网页布局

Blueprint
Blueprint原创
2020年06月19日 10:54:44649浏览

了解浮动

什么是浮动

CSS 的 Float(浮动)是一种使元素脱离文档流的方法,会使元素向左或向右移动,其周围的元素也会重新排列。

Float(浮动),往往是用于图像,但它在布局时一样非常有用。

浮动的表现

浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

  1. <body>
  2. <style>
  3. /* 设置外面盒子的大小 */
  4. .box {
  5. width: 100%;
  6. height: 400px;
  7. border: 2px dashed red;
  8. }
  9. /* 设置小盒子的共同样式 */
  10. .item {
  11. width: 200px;
  12. height: 200px;
  13. border: 1px solid black;
  14. }
  15. /* 每个item的背景 */
  16. .box > :first-child {
  17. background-color: #00ff00;
  18. }
  19. .box > :last-child {
  20. background-color: #ff0000;
  21. }
  22. .box > :nth-child(2) {
  23. background-color: #0000ff;
  24. }
  25. </style>
  26. <div class="box">
  27. <div class="item">box1</div>
  28. <div class="item">box2</div>
  29. <div class="item">box3</div>
  30. </div>
  31. </body>

  1. <body>
  2. <style>
  3. /* 设置外面盒子的大小 */
  4. .box {
  5. width: 100%;
  6. height: 400px;
  7. border: 2px dashed red;
  8. }
  9. /* 设置小盒子的共同样式 */
  10. .item {
  11. width: 200px;
  12. height: 200px;
  13. border: 1px solid black;
  14. }
  15. /* 每个item的背景 */
  16. .box > :first-child {
  17. background-color: #00ff00;
  18. }
  19. .box > :last-child {
  20. background-color: #ff0000;
  21. }
  22. .box > :nth-child(2) {
  23. background-color: #0000ff;
  24. }
  25. /* 向左浮动 */
  26. .item {
  27. float: left;
  28. }
  29. </style>

  1. <style>
  2. /* 设置外面盒子的大小 */
  3. .box {
  4. width: 100%;
  5. height: 400px;
  6. border: 2px dashed red;
  7. }
  8. /* 设置小盒子的共同样式 */
  9. .item {
  10. width: 200px;
  11. height: 200px;
  12. border: 1px solid black;
  13. }
  14. /* 每个item的背景 */
  15. .box > :first-child {
  16. background-color: #00ff00;
  17. }
  18. .box > :last-child {
  19. background-color: #ff0000;
  20. }
  21. .box > :nth-child(2) {
  22. background-color: #0000ff;
  23. }
  24. /* 向右浮动 */
  25. .item {
  26. float: right;
  27. }
  28. </style>

如果父级元素的宽度无法容纳水平排列的三个浮动块,那么其它浮动块向下移动,直到有足够的空间。如果浮动元素的高度不同,那么当它们向下移动时可能被其它浮动元素“卡住”:

浮动对布局的影响

浮动的元素会脱离文档流,正是因为这种特性,导致本属于普通流中的元素浮动之后,包含框中由于不存在其他普通流元素了,也就表现出高度为0(高度塌陷)

  1. <body>
  2. <style>
  3. /* 设置外面盒子的大小 */
  4. .box {
  5. width: 500px;
  6. border: 2px dashed red;
  7. }
  8. /* 设置小盒子的共同样式 */
  9. .item {
  10. height: 200px;
  11. width: 200px;
  12. border: 1px solid black;
  13. /* 设置浮动 */
  14. float: left;
  15. }
  16. /* 每个item的背景 */
  17. .box > :first-child {
  18. background-color: #00ff00;
  19. }
  20. .box > :last-child {
  21. background-color: #ff0000;
  22. }
  23. .box > :nth-child(2) {
  24. background-color: #0000ff;
  25. }
  26. /* 向右浮动 */
  27. </style>
  28. <div class="box">
  29. <div class="item">box1</div>
  30. <div class="item">box2</div>
  31. <div class="item">box3</div>
  32. </div>
  33. </body>

清除浮动

在实际布局中,往往这并不是我们所希望的,所以需要清除浮动,使其包含框表现出正常的高度。

使用空标签清除浮动
  1. <div>
  2. <div style="float:left;">item</div>
  3. <div style="float:left;">item</div>
  4. <div style="clear:both;"></div>
  5. </div>

优点:通俗易懂,容易掌握

缺点:增加了空标签,改变了DOM结构,对js的DOM操作有影响

父级元素浮动
  1. <body>
  2. <style>
  3. body > div {
  4. width: 400px;
  5. border: 1px dashed red;
  6. /*父级添加浮动*/
  7. float: left;
  8. }
  9. div > div {
  10. width: 50px;
  11. height: 50px;
  12. background-color: green;
  13. border: 1px solid black;
  14. }
  15. </style>
  16. <div>
  17. <div style="float: left;"></div>
  18. <div style="float: left;"></div>
  19. <div style="float: left;"></div>
  20. </div>
  21. </body>

优点:不存在结构和语义化问题,代码量极少。

缺点:使得与父元素相邻的元素的布局会受到影响,不可能一直浮动到body。

::after伪元素
  1. <body>
  2. <style>
  3. body > div {
  4. width: 400px;
  5. border: 1px dashed red;
  6. }
  7. div > div {
  8. width: 50px;
  9. height: 50px;
  10. background-color: green;
  11. border: 1px solid black;
  12. }
  13. /*使用::after伪元素*/
  14. body > div:after {
  15. content: "";
  16. display: block;
  17. clear: both;
  18. }
  19. </style>
  20. <div>
  21. <div style="float: left;"></div>
  22. <div style="float: left;"></div>
  23. <div class="clear" style="float: left;"></div>
  24. </div>
  25. </body>

优点:结构和语义化完全正确,代码量居中。
缺点:复用方式不当会造成代码量增加。

父级元素定义overflow:hidden(建议使用)
  1. <body>
  2. <style>
  3. body > div {
  4. width: 400px;
  5. border: 1px dashed red;
  6. /* 使用overflow 属性*/
  7. overflow: hidden;
  8. }
  9. div > div {
  10. width: 50px;
  11. height: 50px;
  12. background-color: green;
  13. border: 1px solid black;
  14. }
  15. </style>
  16. <div>
  17. <div style="float: left;"></div>
  18. <div style="float: left;"></div>
  19. <div style="float: left;"></div>
  20. </div>
  21. </body>

优点:简单、代码少、浏览器支持好

缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。

浮动和定位实现的三列布局

浮动:
  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. /* 初始化 */
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. /* 页眉页脚 */
  15. header,
  16. footer {
  17. height: 80px;
  18. background-color: lightblue;
  19. }
  20. /* 主体 */
  21. main {
  22. width: 960px;
  23. min-height: 600px;
  24. height: 700px;
  25. margin: auto;
  26. background-color: #cccccc;
  27. /* 清除浮动 */
  28. clear: both;
  29. }
  30. /* 左侧 */
  31. .left {
  32. width: 200px;
  33. min-height: 600px;
  34. height: 100%;
  35. background-color: blue;
  36. /* 浮动 */
  37. float: left;
  38. }
  39. /* 右侧 */
  40. .right {
  41. width: 200px;
  42. min-height: 600px;
  43. height: 100%;
  44. background-color: blue;
  45. /* 浮动 */
  46. float: right;
  47. }
  48. /* 内容 */
  49. article {
  50. min-height: 600px;
  51. height: 100%;
  52. width: 560px;
  53. background-color: green;
  54. /* 浮动 */
  55. float: left;
  56. }
  57. </style>
  58. </head>
  59. <body>
  60. <header>页眉</header>
  61. <main>
  62. <aside class="left">左侧</aside>
  63. <article>内容</article>
  64. <aside class="right">右侧</aside>
  65. </main>
  66. <footer>页脚</footer>
  67. </body>
  68. </html>
定位:

浮动和定位单独布局时代码差别并不大

  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. /* 初始化 */
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. box-sizing: border-box;
  13. }
  14. /* 页眉页脚 */
  15. header,
  16. footer {
  17. height: 80px;
  18. background-color: lightblue;
  19. }
  20. /* 主体 */
  21. main {
  22. width: 960px;
  23. min-height: 600px;
  24. height: 700px;
  25. margin: auto;
  26. background-color: #cccccc;
  27. position: relative;
  28. }
  29. /* 左侧 */
  30. .left {
  31. width: 200px;
  32. min-height: 600px;
  33. height: 100%;
  34. background-color: blue;
  35. /* 定位 */
  36. position: absolute;
  37. top: 0;
  38. left: 0;
  39. }
  40. /* 右侧 */
  41. .right {
  42. width: 200px;
  43. min-height: 600px;
  44. height: 100%;
  45. background-color: blue;
  46. /* 定位 */
  47. position: absolute;
  48. top: 0;
  49. right: 0;
  50. }
  51. /* 内容 */
  52. article {
  53. min-height: 600px;
  54. height: 100%;
  55. width: 560px;
  56. background-color: green;
  57. /* 定位 */
  58. position: absolute;
  59. top: 0;
  60. left: 200px;
  61. }
  62. </style>
  63. </head>
  64. <body>
  65. <header>页眉</header>
  66. <main>
  67. <aside class="left">左侧</aside>
  68. <article>内容</article>
  69. <aside class="right">右侧</aside>
  70. </main>
  71. <footer>页脚</footer>
  72. </body>
  73. </html>

浮动与定位实现
  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. </head>
  8. <style>
  9. /* 初始化 */
  10. * {
  11. margin: 0;
  12. padding: 0;
  13. box-sizing: border-box;
  14. }
  15. /* 页眉页脚 */
  16. header,
  17. footer {
  18. height: 80px;
  19. background-color: lightblue;
  20. }
  21. /* 主体 */
  22. main {
  23. width: 100%;
  24. min-height: 600px;
  25. height: 700px;
  26. margin: auto;
  27. background-color: #cccccc;
  28. /* 内边距 */
  29. padding: 0 300px;
  30. /* 清除浮动 */
  31. clear: both;
  32. }
  33. /* 边栏公共样式 */
  34. aside {
  35. width: 200px;
  36. height: 100%;
  37. background-color: blue;
  38. }
  39. /* 内容区样式 */
  40. article {
  41. width: 100%;
  42. height: 100%;
  43. background-color: lightgreen;
  44. }
  45. /* 主体元素浮动 */
  46. main > * {
  47. float: left;
  48. }
  49. /* 左边栏 */
  50. .left {
  51. margin-left: -100%;
  52. position: relative;
  53. left: -200px;
  54. }
  55. /* 右边栏 */
  56. .right {
  57. margin-left: -200px;
  58. position: relative;
  59. left: 200px;
  60. }
  61. </style>
  62. <body>
  63. <header>页眉</header>
  64. <main>
  65. <article>内容</article>
  66. <aside class="left">左侧</aside>
  67. <aside class="right">右侧</aside>
  68. </main>
  69. <footer>页脚</footer>
  70. </body>
  71. </html>

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