Blogger Information
Blog 29
fans 1
comment 0
visits 35341
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
css布局之浮动与定位的应用
祥子弟弟
Original
943 people have browsed it

一、浮动(float)

浮动属性 float 是指定一个元素沿其所在的容器的左侧或者右侧放置。浮动的出现想解决的问题就是文字和图片的并排显示,不过一旦使用了浮动属性,该元素就会脱离网页正常流动(文档流)。
浮动的缺点:任何一个元素使用浮动属性之后都会脱离文档流,然后在父级元素计算高度的时候,就会忽略内部的浮动元素,造成父级元素高度塌陷。
示例:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>浮动的示例</title>
  6. </head>
  7. <body>
  8. <h1>浮动的本质</h1>
  9. <div class="box">
  10. <div class="child">浮动元素</div>
  11. </div>
  12. </body>
  13. </html>
  1. * {
  2. padding: 0;
  3. margin: 0;
  4. box-sizing: border-box;
  5. }
  6. .box {
  7. /* padding: 1em; */
  8. border: 1px solid #000;
  9. background-color: lightcyan;
  10. }
  11. .child {
  12. width: 5em;
  13. height: 5em;
  14. background-color: lightgreen;
  15. float: left;
  16. }

显示效果如下:


这样就可以看到,浮动后的元素是脱离了文档流的,直接造成了父级元素 box 的高度塌陷,这样的情况,我们可以有三种方法:

  1. 添加一个附加元素,让它消除浮动影响(不建议使用)

  2. 使用伪元素 “:after” 来消除浮动影响

  3. 使用创建 BFC 容器的方法消除浮动影响

  • 添加附加元素

这个就很简单了,就是在浮动元素同级下添加一个空的 div 元素,用来消除浮动影响。

  1. <body>
  2. <h1>浮动的本质</h1>
  3. <div class="box">
  4. <div class="child">浮动元素</div>
  5. <div calss="clear"></div>
  6. </div>
  7. </body>
  1. .clear {
  2. clear: both;
  3. }
  • 使用伪元素
  1. .box:after {
  2. content: "";
  3. /* 使这个区域变成以一个块级元素 */
  4. display: block;
  5. clear: both;
  6. }
  • 创建 BFC 容器

创建 BFC 的方式:任何一个元素添加上以下任何一个属性后就是一个 BFC 容器

  1. float:left / right,不能是 none;
  2. overflow: hidden / auto / scroll, 不能是 visible;
  3. display: flex / inline-flex;
  4. display: grid / inline-grid;
  5. display: inline-block / table-cell;
  6. position: absolute / fiexed。

使用 overflow:hidden;将父元素转为 BFC 容器,使它的布局不受到内部浮动元素的影响

  1. .box {
  2. overflow: hidden;
  3. }

二、定位(position)

定位属性:position

定位类型:

  1. 静态定位(position:static;):文档流定位;默认定位,元素的显示位置与它源码的位置一致

  2. 相对定位(position:relative;):相对于该元素在文档流中的原始位置进行定位(偏移)。

  3. 绝对定位(position:absolute;):相对于它的祖先中离它最近的 “定位元素” 的位置发生偏移(定位元素:只要这个元素中有 position: relative;或者 position:absolute;就称为定位元素,仅限这两种)。如果祖先元素中不存在定位元素,那它就参考根元素(html)进行定位,而且只有定位元素才有资格充当绝对定位元素的定位祖先元素(定位参考元素)。

  4. 固定定位(position:fixed;):它是绝对定位的一个特例,它始终相对于 html 定位。固定定位应用场景:在线客服,广告位等。

定位实战

  • 模态框实现

特点:点击“登录”按钮弹出登录框,同时登录框居于屏幕中央,背景半透明,点击“关闭”按钮时,登录框隐藏,页面恢复原来亮度。

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>模态框</title>
  6. <link rel="stylesheet" href="style/demo6.css" />
  7. </head>
  8. <body>
  9. <!-- 页眉 -->
  10. <header>
  11. <h2>我的博客</h2>
  12. <button>登录</button>
  13. </header>
  14. <!-- 模态框 -->
  15. <div class="modal">
  16. <!-- 蒙板:用来盖住后面的内容,使它半透明 -->
  17. <div class="modal-coverback"></div>
  18. <!-- 主体 -->
  19. <div class="modal-body">
  20. <button class="close">关闭</button>
  21. <form action="" method="POST">
  22. <table>
  23. <caption>
  24. 用户登录
  25. </caption>
  26. <tr>
  27. <td><label for="username">用户名:</label></td>
  28. <td>
  29. <input type="text" name="username" id="username" required />
  30. </td>
  31. </tr>
  32. <tr>
  33. <td><label for="psd">密码:</label></td>
  34. <td><input type="password" name="psd" id="psd" required /></td>
  35. </tr>
  36. <tr>
  37. <td></td>
  38. <td><button>登录</button></td>
  39. </tr>
  40. </table>
  41. </form>
  42. </div>
  43. </div>
  44. </body>
  45. </html>
  46. <script src="js/demo6.js"></script>

demo6.css 代码如下:

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. /* 页眉样式 */
  7. header {
  8. background-color: #ccc;
  9. padding: 0.5em 2em;
  10. overflow: hidden;
  11. font-style: italic;
  12. color: #123456;
  13. }
  14. header h2 {
  15. float: left;
  16. }
  17. header button {
  18. float: right;
  19. width: 5em;
  20. height: 2.5em;
  21. }
  22. header button:hover {
  23. cursor: pointer;
  24. opacity: 0.8;
  25. }
  26. /* 模态框样式 */
  27. /* 蒙版 */
  28. /* 使用固定定位 */
  29. .modal .modal-coverback {
  30. background-color: rgb(0, 0, 0, 0.5);
  31. position: fixed;
  32. top: 0;
  33. left: 0;
  34. right: 0;
  35. bottom: 0;
  36. }
  37. /* 主体 */
  38. .modal .modal-body {
  39. padding: 1em;
  40. min-width: 20em;
  41. min-height: 10em;
  42. border: 1px solid #000;
  43. background: linear-gradient(to right, lightcyan, #fff);
  44. /* 固定定位 */
  45. position: fixed;
  46. /* top: 0;
  47. left: 0;
  48. right: 0;
  49. bottom: 0; */
  50. /* margin: auto; */
  51. /* 实现屏幕居中 */
  52. top: 50%;
  53. left: 50%;
  54. /* 向后平移以自身为基准的50% */
  55. transform: translate(-50%, -50%);
  56. }
  57. .modal form table {
  58. width: 80%;
  59. }
  60. .modal form table caption {
  61. font-weight: bold;
  62. margin-bottom: 1em;
  63. }
  64. .modal form table td {
  65. padding: 0.5em 0;
  66. margin-bottom: 2em;
  67. }
  68. .modal form table td:first-of-type {
  69. width: 5em;
  70. }
  71. .modal form table td input {
  72. width: auto;
  73. height: auto;
  74. }
  75. .modal form table button {
  76. width: 7.5em;
  77. height: 2.5em;
  78. }
  79. .modal form table button:hover {
  80. opacity: 0.8;
  81. cursor: pointer;
  82. }
  83. .modal-body {
  84. position: relative;
  85. }
  86. .modal .close {
  87. position: absolute;
  88. width: 4em;
  89. height: 2em;
  90. top: 1em;
  91. right: 1em;
  92. }
  93. .modal .close:hover {
  94. cursor: pointer;
  95. background-color: lightcyan;
  96. color: #000;
  97. box-shadow: 0 0 2px #eee;
  98. }
  99. /* 页面初始化时,模态框应该隐藏 */
  100. .modal {
  101. display: none;
  102. }

demo6.js 代码:

  1. const btn = document.querySelector("header button");
  2. const modal = document.querySelector(".modal");
  3. const close = document.querySelector(".close");
  4. btn.addEventListener("click", setModal, false);
  5. close.addEventListener("click", setModal, false);
  6. function setModal(ev) {
  7. ev.preventDefault();
  8. let status = window.getComputedStyle(modal, null).getPropertyValue("display");
  9. modal.style.display = status === "none" ? "block" : "none";
  10. }

显示效果如下:

点击前效果:

点击后效果:

  • 使用定位制作一个五环

五环样式要求如下:

为了显示效果,将五环置于屏幕中央
示例代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>使用绝对定位实现五环效果</title>
  6. <link rel="stylesheet" href="style/five-ring.css" />
  7. </head>
  8. <body>
  9. <div class="body">
  10. <div class="circle1"></div>
  11. <div class="circle2"></div>
  12. <div class="circle3"></div>
  13. <div class="circle4"></div>
  14. <div class="circle5"></div>
  15. </div>
  16. </body>
  17. </html>

five-ring.css 代码

  1. * {
  2. padding: 0;
  3. margin: 0;
  4. box-sizing: border-box;
  5. }
  6. html {
  7. font-size: 10px;
  8. }
  9. .body {
  10. width: 35em;
  11. height: 20em;
  12. /* border: 1px solid #000;
  13. background-color: lightcyan; */
  14. }
  15. .body {
  16. position: relative;
  17. /* overflow: hidden; */
  18. position: fixed;
  19. top: 50%;
  20. left: 50%;
  21. transform: translate(-50%, -50%);
  22. }
  23. .circle1,
  24. .circle2,
  25. .circle3,
  26. .circle4,
  27. .circle5 {
  28. position: absolute;
  29. width: 10em;
  30. height: 10em;
  31. border: 10px solid #0388d4;
  32. border-radius: 50%;
  33. }
  34. .circle1 {
  35. top: 0;
  36. left: 0;
  37. z-index: 1;
  38. }
  39. .circle2 {
  40. top: 0;
  41. left: 11em;
  42. border-color: #000;
  43. z-index: 3;
  44. }
  45. .circle3 {
  46. top: 0;
  47. left: 22em;
  48. border-color: #df0510;
  49. z-index: 5;
  50. }
  51. .circle4 {
  52. top: 4.5em;
  53. left: 5.5em;
  54. border-color: #f7b714;
  55. z-index: 2;
  56. }
  57. .circle5 {
  58. top: 4.5em;
  59. left: 16.5em;
  60. border-color: #038f40;
  61. z-index: 4;
  62. }

显示效果如下:

五环

Correcting teacher:天蓬老师天蓬老师

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