Blogger Information
Blog 16
fans 0
comment 0
visits 13939
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
CSS进阶响应式布局浮动定位知识
wen。
Original
1160 people have browsed it

响应式布局

响应式布局等于流动网格布局,这里响应式布局分为四种;第一种浮动float布局(传统布局),第二种定位position布局,第三种弹性flex盒子,还有最后一种网格grid布局;后两种会在接下来的文章中介绍,本章主要讲定位布局。

1.浮动布局float

解释 说明
本质 为了解决图文并茂显示问题
核心 浮动初心是为了解决图片与文本并排显示的问题
原理 浮动元素脱离了文档流,后面的元素会上移填充它原来的空间
特征 任何元素(包括行内元素)浮动后,都具备了块级元素的特征

注意:浮动元素不会影响到它前面的元素的布局,只会影响到后面的元素的排列

1.1 浮动问题

  • 父元素计算高度的时候,会忽略内部的浮动元素(父级高度塌陷)
    • 解决方式是使用clear:both清除浮动
  • 如何解决右边元素文本自动延伸到左边浮动元素的下面
    • BFC:创建独立的布局单元
    • 创建BFC的方式: 任何一个元素添加上以下任何一个属性后就是一个BFC容器
符合BFC法则 备注
float: left / right 不能是 none
overflow: hidden / auto / scroll 不能是 visible
display: inline-block / table-cell
display: flex / inline-flex
display: grid / inline-grid
position: absolute / fiexed
  • 如何不使用清除浮动来解决父级高度塌陷和左右浮动元素独立问题
    • 在父类元素使用overflow:hidden转为BFC

2.定位布局position

2.1 定位类型

类型 说明
static 默认,也就是文档流定位,元素的位置和源码顺序一样
relative 相对于该元素在文档流中的原始位置进行偏移
absolute 相对于它的定位祖先元素中离它最近的”定位元素”的位置发生偏移
fiex 它始终相对于html进行定位

何为”定位元素”呢?

定位元素:只要这个元素中有position:relavite或者position:absolute就称为定位元素;

2.2 使用条件

  • 相对定位
    • 父级元素转为定位元素,它内部的元素就相对于它进行绝对定位
  • 绝对定位
    • 绝对定位元素会脱离文档流
    • 如果祖先元素中不存在定位元素,它就参考根元素(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. .box{
  9. width: 15em;
  10. height: 15em;
  11. background-color: lawngreen;
  12. /* 转为定位元素,它内部的元素就相对于它进行绝对定位 */
  13. position: relative;
  14. }
  15. .box .sub{
  16. width: 5em;
  17. height: 5em;
  18. left: 0;
  19. right: 0;
  20. top: 0;
  21. bottom: 0;
  22. /* 使用绝对定位的完全定位空间来快速实现水平和垂直居中 */
  23. margin: auto;
  24. background-color: yellow;
  25. position: absolute;
  26. }
  27. </style>
  28. </head>
  29. <body>
  30. <div class="box">
  31. <div class="sub"></div>
  32. </div>
  33. </body>
  34. </html>

效果图如下
定位元素效果图

3.模态框实战

接下来我们运用固定定位来实现模态框效果

3.1 css代码如下

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. box-sizing: border-box;
  5. }
  6. header {
  7. padding: 1em 2em;
  8. background-color: #ccc;
  9. overflow: hidden;
  10. }
  11. header h2 {
  12. float: left;
  13. }
  14. header button {
  15. width: 10em;
  16. height: 2.5em;
  17. float: right;
  18. }
  19. .modal {
  20. width: 5em;
  21. height: 5em;
  22. display: none;
  23. }
  24. .modal .modal-backsorp {
  25. /* 蒙版 */
  26. background-color: rgba(0, 0, 0, 0.8);
  27. left: 0;
  28. top: 0;
  29. right: 0;
  30. bottom: 0;
  31. position: fixed;
  32. }
  33. .modal .modal-body {
  34. left: 30em;
  35. top: 5em;
  36. right: 30em;
  37. min-height: 15em;
  38. /* 固定定位 */
  39. position: fixed;
  40. background-color: #fff;
  41. }
  42. .modal .modal-body .pane-header {
  43. width: 100%;
  44. height: 64px;
  45. background-color: orangered;
  46. border-radius: 5px 5px 0 0;
  47. line-height: 64px;
  48. color: white;
  49. text-align: center;
  50. margin-bottom: 10px;
  51. cursor: move;
  52. padding: 0em 2em 0em 2em;
  53. }
  54. .modal .modal-body .pane-header h2 {
  55. float: left;
  56. padding-left: 6em;
  57. }
  58. .modal .modal-body .pane-header button {
  59. float: right;
  60. padding: 0.3em;
  61. width: 5em;
  62. margin-top: 1.2em;
  63. }
  64. .modal .modal-body .pane-content {
  65. padding: 2em;
  66. }
  67. .modal .modal-body .pane-content .userpwd {
  68. margin-bottom: 15px;
  69. height: 40px;
  70. position: relative;
  71. }
  72. .modal .modal-body .pane-content .userpwd img {
  73. position: absolute;
  74. top: 7px;
  75. left: 6px;
  76. }
  77. .modal .modal-body .pane-content .userpwd input {
  78. width: 100%;
  79. height: 100%;
  80. box-sizing: border-box;
  81. padding-left: 38px;
  82. border-radius: 5px;
  83. border: 1px solid #dddddd;
  84. }
  85. input[type="text"],
  86. input[type="password"] {
  87. border-width: 1px;
  88. border-style: solid;
  89. border-color: #707070 #CECECE #CECECE #707070;
  90. padding: 2px 4px;
  91. height: 18px;
  92. line-height: 18px;
  93. vertical-align: middle;
  94. }
  95. .modal .modal-body .login-btn {
  96. margin: 15px 0;
  97. width: 100%;
  98. height: 38px;
  99. background-color: orangered;
  100. border: 0;
  101. font-size: 20px;
  102. color: white;
  103. border-radius: 5px;
  104. cursor: pointer;
  105. }

3.2 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. <link src="modal.css">
  8. </head>
  9. <body>
  10. <!-- 页眉 -->
  11. <header>
  12. <h2>我的博客</h2>
  13. <button>登录</button>
  14. </header>
  15. <!-- 模态框 -->
  16. <div class="modal">
  17. <!-- 蒙板:用来盖住后面的内容,使它半透明状态 -->
  18. <div class="modal-backsorp"></div>
  19. <!-- 主体 -->
  20. <div class="modal-body">
  21. <div class="pane-header">
  22. <h2>登陆页面模板</h2>
  23. <button class="close">关闭</button>
  24. </div>
  25. <div class="pane-content">
  26. <form name="form1" method="post" action="login.php">
  27. <div class="userpwd">
  28. <img src="images/icon_people.png">
  29. <input type="text" name="userid" placeholder="请输入用户名/手机号">
  30. </div>
  31. <div class="userpwd">
  32. <img src="images/icon_password.png">
  33. <input type="password" name="pwd" placeholder="请输入密码">
  34. </div>
  35. <dt>&nbsp;</dt>
  36. <button type="submit" name="sm1" class="login-btn" onclick="this.form.submit();">登录</button>
  37. </form>
  38. </div>
  39. </div>
  40. </div>
  41. </body>
  42. <script src="modal.js"></script>
  43. </html>

3.3 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. }

3.4 效果图如下
模态框效果图

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