CSS 布局 - 浮动实例

本页提供常见的浮动案例。


网格 / 等宽的框

Box 1

Box 2

Box 1

Box 2

Box 3

通过使用 float 属性,可以轻松地并排浮动内容框:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. * {
  6. box-sizing: border-box;
  7. }
  8. .box {
  9. float: left;
  10. width: 33.33%;
  11. padding: 50px;
  12. }
  13. .clearfix::after {
  14. content: "";
  15. clear: both;
  16. display: table;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <h1>网格框</h1>
  22. <p>并排浮动的框:</p>
  23. <div class="clearfix">
  24. <div class="box" style="background-color:#bbb">
  25. <p>框中的一些文本。</p>
  26. </div>
  27. <div class="box" style="background-color:#ccc">
  28. <p>框中的一些文本。</p>
  29. </div>
  30. <div class="box" style="background-color:#ddd">
  31. <p>框中的一些文本。</p>
  32. </div>
  33. </div>
  34. <p>请注意,我们还用了 clearfix hack 来处理布局流,并添加了 box-sizing 属性,以确保框不会由于额外的内边距(填充)而损坏。尝试删除此代码以查看效果。</p>
  35. </body>
  36. </html>

什么是 box-sizing?

您可以轻松地并排创建三个浮动框。但是,当您添加一些内容来扩大每个框的宽度(例如,内边距或边框)时,这个框会被破坏。 box-sizing 属性允许我们在框的总宽度(和高度)中包括内边距和边框,确保内边距留在框内而不会被破坏。

您可以访问本站的 CSS Box Sizing 这一章中学习有关 box-sizing 属性的更多知识。


图像并排

Italy
Forest
Mountains

这种框格(The grid of boxes)也可以用来并排显示图像:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. * {
  6. box-sizing: border-box;
  7. }
  8. .img-container {
  9. float: left;
  10. width: 33.33%;
  11. padding: 5px;
  12. }
  13. .clearfix::after {
  14. content: "";
  15. clear: both;
  16. display: table;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <h1>并排的图像</h1>
  22. <p>并排浮动图像:</p>
  23. <div class="clearfix">
  24. <div class="img-container">
  25. <img src="/znadmin/md/1241/0.jpg" style="width:100%">
  26. </div>
  27. <div class="img-container">
  28. <img src="/znadmin/md/1241/1.jpg" style="width:100%">
  29. </div>
  30. <div class="img-container">
  31. <img src="/znadmin/md/1241/2.jpg" style="width:100%">
  32. </div>
  33. </div>
  34. <p>请注意,我们还用了 clearfix hack 来处理布局流,并添加了 box-sizing 属性以确保图像容器不会由于额外的内边距(填充)而损坏。请尝试删除此代码以查看效果。</p>
  35. </body>
  36. </html>

等宽的框

在上例中,您学习了如何以相等的宽度并排浮动框。但是,创建具有相同高度的浮动框并不容易。不过,快速解决方案是设置一个固定的高度,如下例所示:


Box 1

Some content, some content, some content

Box 2

Some content, some content, some content

Some content, some content, some content

Some content, some content, some content

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. * {
  6. box-sizing: border-box;
  7. }
  8. .box {
  9. float: left;
  10. width: 50%;
  11. padding: 50px;
  12. height: 300px;
  13. }
  14. .clearfix::after {
  15. content: "";
  16. clear: both;
  17. display: table;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <h1>等高框</h1>
  23. <p>有相同高度的浮动框:</p>
  24. <div class="clearfix">
  25. <div class="box" style="background-color:#bbb">
  26. <h2>Box 1</h2>
  27. <p>Some content, some content, some content</p>
  28. </div>
  29. <div class="box" style="background-color:#ccc">
  30. <h2>Box 2</h2>
  31. <p>Some content, some content, some content</p>
  32. <p>Some content, some content, some content</p>
  33. <p>Some content, some content, some content</p>
  34. </div>
  35. </div>
  36. <p>这个例子不是很灵活。如果可以保证框中始终有相同数量的内容,则可以使用 CSS 高度,但并非总是如此。如果您在手机上尝试上例(或调整浏览器窗口的大小),则会看到第二个框的内容将显示在框的外部。</p>
  37. <p>如果这不是您想要的,请返回教程并学习另一个解决方案。</p>
  38. </body>
  39. </html>

但是,这么做就失去了弹性。如果可以保证框中始终有相同数量的内容,那是可以的。但是很多时候,内容是不一样的。如果您在手机上尝试上例,则会看到第二个框的内容将显示在框的外部。这是 CSS3 Flexbox 派上用场的地方 - 因为它可以自动拉伸框使其与最长的框一样长:

实例

使用 Flexbox 创建弹性框:

Box 1 - 这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。
Box 2 - 我的高度将跟随框 1。

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. .flex-container {
  6. display: flex;
  7. flex-wrap: nowrap;
  8. background-color: DodgerBlue;
  9. }
  10. .flex-container .box {
  11. background-color: #f1f1f1;
  12. width: 50%;
  13. margin: 10px;
  14. text-align: center;
  15. line-height: 75px;
  16. font-size: 30px;
  17. }
  18. </style>
  19. </head>
  20. <body>
  21. <h1>弹性框</h1>
  22. <div class="flex-container">
  23. <div class="box">框 1 - 这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。</div>
  24. <div class="box">框 2 - 我的高度与框 1 保持一致。</div>
  25. </div>
  26. <p>请尝试调整浏览器窗口的大小,以查看弹性布局。</p>
  27. <p><b>注释:</b>Internet Explorer 10 或更早的版本不支持 Flexbox。</p>
  28. </body>
  29. </html>

Flexbox 的唯一问题是它在 Internet Explorer 10 或更早版本中不起作用。您可以访问本站的 CSS Flexbox 章节中学习有关 Flexbox 布局模块的更多知识。


导航菜单

float 与超链接列表一起使用,来创建水平菜单:

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. ul {
  6. list-style-type: none;
  7. margin: 0;
  8. padding: 0;
  9. overflow: hidden;
  10. background-color: #333;
  11. }
  12. li {
  13. float: left;
  14. }
  15. li a {
  16. display: inline-block;
  17. color: white;
  18. text-align: center;
  19. padding: 14px 16px;
  20. text-decoration: none;
  21. }
  22. li a:hover {
  23. background-color: #111;
  24. }
  25. .active {
  26. background-color: red;
  27. }
  28. </style>
  29. </head>
  30. <body>
  31. <ul>
  32. <li><a href="#home" class="active">Home</a></li>
  33. <li><a href="#news">News</a></li>
  34. <li><a href="#contact">Contact</a></li>
  35. <li><a href="#about">About</a></li>
  36. </ul>
  37. </body>
  38. </html>

Web 布局实例

使用 float 属性完成整个 Web 布局也很常见:

代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <style>
  5. * {
  6. box-sizing: border-box;
  7. }
  8. .header, .footer {
  9. background-color: grey;
  10. color: white;
  11. padding: 15px;
  12. }
  13. .column {
  14. float: left;
  15. padding: 15px;
  16. }
  17. .clearfix::after {
  18. content: "";
  19. clear: both;
  20. display: table;
  21. }
  22. .menu {
  23. width: 25%;
  24. }
  25. .content {
  26. width: 75%;
  27. }
  28. .menu ul {
  29. list-style-type: none;
  30. margin: 0;
  31. padding: 0;
  32. }
  33. .menu li {
  34. padding: 8px;
  35. margin-bottom: 8px;
  36. background-color: #33b5e5;
  37. color: #ffffff;
  38. }
  39. .menu li:hover {
  40. background-color: #0099cc;
  41. }
  42. </style>
  43. </head>
  44. <body>
  45. <div class="header">
  46. <h1>大武汉</h1>
  47. </div>
  48. <div class="clearfix">
  49. <div class="column menu">
  50. <ul>
  51. <li>航班</li>
  52. <li>城市</li>
  53. <li>景点</li>
  54. <li>美食</li>
  55. </ul>
  56. </div>
  57. <div class="column content">
  58. <h1>城市</h1>
  59. <p>武汉,简称“汉”,别称江城,是湖北省省会,中部六省唯一的副省级市,特大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽。
  60. </p>
  61. <p>在后面的章节中,您将了解更多有关 web 布局和响应式 web 页面的信息。</p>
  62. </div>
  63. </div>
  64. <div class="footer">
  65. <p>页脚文本</p>
  66. </div>
  67. </body>
  68. </html>

所有 CSS 浮动属性

属性描述
box-sizing定义元素的宽度和高度的计算方式:它们是否应包含内边距和边框。
clear指定哪些元素可以在被清除的元素旁边以及在哪一侧浮动。
float指定元素应如何浮动。
overflow指定如果内容溢出元素框会发生什么情况。
overflow-x指定当溢出元素的内容区域时,如何处理内容的左/右边缘。
overflow-y指定当溢出元素的内容区域时,如何处理内容的上/下边缘。