Blogger Information
Blog 11
fans 0
comment 0
visits 13358
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
了解浮动和其网页布局
Blueprint
Original
650 people have browsed it

了解浮动

什么是浮动

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>

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
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!