博客列表 >浮动元素、定位,利用定位做布局

浮动元素、定位,利用定位做布局

天涯
天涯原创
2020年06月19日 10:47:12876浏览

浮动元素、定位,利用定位做布局

什么是浮动元素

浮动元素可以从文档流中脱离并释放原来占据的空间的元素

浮动元素的用途

可以在父容器中随意定位,使元素在定位时更加灵活,比如:垂直居中、层叠效果、多元素同行显示等

如何实现浮动元素

css中用float属性来实现:float:left;/*左对齐浮动*/

浮动元素的特征

  • 当元素实现浮动后,会释放原来文档流中的空间
  • 在它之后的元素自动填充它的空间
  • 只对后面的元素产生影响,对前面元素没有影响
  • 任何元素,转为浮动元素的同时,也自动转为块级元素,具有块级元素的所有特征及属性
  • 浮动元素只能在水平方向浮动并受限于父级元素的内容区

代码演示:

  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. border: 3px solid #000;
  10. padding: 50px;
  11. }
  12. .box {
  13. width: 200px;
  14. height: 200px;
  15. }
  16. .box1 {
  17. background-color: lightblue;
  18. /* 左浮动 */
  19. float: left;
  20. }
  21. .box2 {
  22. background-color: lightcoral;
  23. width: 220px;
  24. height: 220px;
  25. /* 右浮动 */
  26. float: right;
  27. }
  28. .box3 {
  29. background-color: lightgreen;
  30. width: 220px;
  31. height: 220px;
  32. /* 不想让它受到前面的浮动元素的影响 */
  33. /* clear: left;
  34. clear: right; */
  35. clear: both;
  36. }
  37. </style>
  38. </head>
  39. <body>
  40. <div class="box box1">box1</div>
  41. <div class="box box2">box2</div>
  42. <div class="box box3">box3</div>
  43. <!-- 浮动元素只能水平方向浮动
  44. 浮动元素的浮动边界仅限于内容区 -->
  45. </body>
  46. </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>浮动元素的高度塌陷与解决方案</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. .item {
  25. /*变成浮动*/
  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>

塌陷效果图:

可怜的父元素

塌陷的解决方案

解决方案有很多,这里介绍比较常用的5种解决方案,比较推荐的是解决方案4和解决方案5。

  1. 给父元素也添加一个高度(问题是不会随着子元素同步高度,每次要根据子元素的高度来更改父元素高度,不但麻烦,也不实用)
  2. 把父元素也浮动起来(问题是会给整个文档带 来联动效应,造成其它元素布局混乱)
  3. 添加一个专用元素用于清浮动(问题是多了一个无用的实体元素,给选择器带麻烦,取数带来麻烦)
  4. 通过添加一个伪元素来解决(推荐使用,衍生问题较小)
  5. 最简单的解决方案,用到BFC(块级格式化上下文)(终级解决方案,代码少,效果好)

详细代码展示

  1. /* 解决方案1: 给父元素也添加一个高度 */
  2. /* .container { */
  3. /* height: 150px; */
  4. /* } */
  5. /* 解决方案2: 把父元素也浮动起来 */
  6. /* .container {
  7. float: left;
  8. }
  9. .box {
  10. float: left;
  11. } */
  12. /* 解决方案3: 添加一个专用元素用于清浮动 */
  13. /* div.clear {
  14. clear: both;
  15. } */
  16. /* 解决方案4: 通过添加一个伪元素来解决 */
  17. /* .container::after {
  18. content: "";
  19. display: block;
  20. clear: both;
  21. } */
  22. /* 解决方案5: 最简单的解决方案,用到BFC(块级格式化上下文) */
  23. .container {
  24. overflow: auto;
  25. }

第5种解决方案效果图

效果图

利用定位做一个通用三列布局案例

body代码:

  1. <body>
  2. <!-- 页眉 -->
  3. <div class="header">
  4. <!-- 内容区: 水平居中 -->
  5. <div class="content">
  6. <ul>
  7. <li><a href="">首页</a></li>
  8. <li><a href="">主会场</a></li>
  9. <li><a href="">在线客服</a></li>
  10. </ul>
  11. </div>
  12. </div>
  13. <!-- 主体 -->
  14. <div class="container">
  15. <div class="left">左侧</div>
  16. <div class="main">内容区</div>
  17. <div class="right">右侧</div>
  18. </div>
  19. <!-- 页脚 -->
  20. <div class="footer">
  21. <div class="content">
  22. <p>*******有限公司&copy; | 备案号: 京ICP *********</p>
  23. </div>
  24. </div>
  25. </body>

css代码:

  1. <style>
  2. /* 先将所有元素初始化,避免引起定位不到位的情况 */
  3. * {
  4. /* 外边距为0 */
  5. margin: 0;
  6. /* 内边距为0 */
  7. padding: 0;
  8. /* 使高度或宽度均包括到边框,这样设置高宽时更容易被理解,不用考虑边框有多宽或多高 */
  9. box-sizing: border-box;
  10. }
  11. li {
  12. /* 去掉列表小点 */
  13. list-style: none;
  14. }
  15. a {
  16. /* 去掉链接上的下划线 */
  17. text-decoration: none;
  18. color: #666;
  19. }
  20. /* 页眉与页脚 */
  21. .header,
  22. .footer {
  23. height: 40px;
  24. background-color: lightblue;
  25. }
  26. /* 页眉与页脚的内容区 */
  27. .content {
  28. width: 960px;
  29. /* 居中处理 */
  30. margin: auto;
  31. }
  32. .content ul li {
  33. /* 将列表转为浮动元素,left表示靠左边 */
  34. float: left;
  35. line-height: 40px;
  36. /* 设置外边距,0表示上下各为0,15px表示左右各为15像素 */
  37. padding: 0 15px;
  38. }
  39. .content ul li:hover {
  40. background-color: coral;
  41. }
  42. /* 页脚样式 */
  43. .content p {
  44. /* 文字居中 */
  45. text-align: center;
  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: 200px;
  59. background-color: wheat;
  60. min-height: 600px;
  61. /* 转为绝对定位,用来固定起始位置,top距顶端的距离,left距左端的距离 */
  62. position: absolute;
  63. top: 0;
  64. left: 0;
  65. }
  66. .container > .right {
  67. width: 200px;
  68. background-color: wheat;
  69. min-height: 600px;
  70. position: absolute;
  71. top: 0;
  72. right: 0;
  73. }
  74. .container > .main {
  75. background-color: lightgreen;
  76. min-height: 600px;
  77. width: 540px;
  78. position: absolute;
  79. top: 0;
  80. left: 210px;
  81. }
  82. </style>

效果图:

通用布局效果图

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