博客列表 >默认布局与定位布局

默认布局与定位布局

斗人传说
斗人传说原创
2022年07月12日 00:44:52477浏览

博客已迁移至自建网站,此博客已废弃.请移步至:https://blog.ours1984.top/posts/dwbj/ 欢迎大家访问

文档布局流

文档流指的是什么呢?由于这是显示在浏览器上面的,显示在电脑屏幕前的。如果我们将屏幕的两侧想象成河道,将屏幕的上面作为流的源头,将屏幕的底部作为流的结尾的话,那我们就抽象出来了文档流 !

20220711232726

  1. 元素显示顺序 = 元素在源码中的书写顺序
  2. 元素的排列位置,具有”预测性”
  3. 文档流 -> 文档布局流 -> 正常布局流
  4. 默认定位: position: static (静态定位)

元素布局完整流程

  1. 把内容(匿名文本)放到一个独立的,矩形的盒子: 盒模型
  2. 将内容放到什么样的盒子中? 就决定了这是什么类型的元素
  3. 为这个矩形盒子,添加上padding,border,margin
  • padding: 内边距
  • margin: 外边距
  • padding, margin,不可见,但可感知它的存在,如空气,只可以设置宽度
  • border: 边框 / 边界 / 盒子计算大小的依据

那文档流流动的又是什么呢?那就是元素!可以将屏幕中显示的内容都可以一一对应为文档中的一个元素,在这里就引出两个概念:内联元素与块级元素

内联元素和块级元素

块级: display: block / table / table-cell,td / list-item / form / p / h1-h6/…

  • 宽度: 总是占据父级的全部宽度 100%
  • 高度: 由内容决定
  • 可以自定义宽高
  • 排列: 垂直

内联/行内: 用来描述块级元素内部的内容/文本

  • 高度: 内容高度
  • 宽度: 内容宽度
  • 宽高不能自定义
  • padding有效,margin只有左右有效
  • 排列: 水平, 排不下,则换行显示
  • display: inline

可以将内联元素转为块级,使宽高生效, 这时后面的其它元素垂直排列display: block

如果不想让后面的元素换行显示/垂直排列,可以将它转为内联块/行内块

  1. display: inline-block;
  2. /* 内联块/行内块: 即像内联一样水平排列,又像块级一样可以设置宽高 */
  3. /* 内联块的排列方式,仍然是水平的, 所以说, 内联块本质上仍是内联元素 */
  4. /* 内联块,可视为内联元素的一个特例/子集 */

脱离文档流

但是仅有的两种排版,就满足了我们的需求吗?肯定是不够的!!应该有一种更加自由的变换,从而满足多样的世界。有三种方式脱离文档流:

  1. position:absolute
  2. position:fixed
  3. float

将文档流比作是河流的话,水就相当于文档流里面的元素。而脱离文档流就相当于脱离水跑到水的上面飘着,就像河流上的小船。

20220711233901

文档定位position

position属性取值含义如下

描述 参照物 定位规则
absolute 生成绝对定位的元素 static定位以外的第一个父元素 通过”left”,”top”,”right”以及”bottom”属性进行规定
fixed 生成绝对定位的元素 浏览器窗口进行定位 通过”left”,”top”,”right”以及”bottom”属性进行规定
relative 生成相对定位的元素 自身在文档流中的位置 “left:20”会向元素的LEFT位置添加20像素
static 默认值 没有定位 元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)
sticky 粘性定位 = 静态定义 + 固定定位 浏览器窗口进行定位 当到了设置好的位置时,就自动悬停住了,采用固定定位
inherit 规定应该从父元素继承position属性的值

20220711213331

  1. <div class="testPosition">
  2. <div class="box parent">
  3. <div class="box child one">child-1:相对定位相对定位相对定位相对定位</div>
  4. <div class="box child two">child-2:绝对定位绝对定位绝对定位绝对定位</div>
  5. <div class="box child three">child-3:固定定位固定定位固定定位</div>
  6. <div class="box child four">child-4:粘性定位粘性定位粘性定位</div>
  7. </div>
  8. </div>
  9. <style>
  10. .testPosition {
  11. height: 1000px;
  12. border: 2px solid blue;
  13. }
  14. .testPosition .box {
  15. border: 1px solid #000;
  16. }
  17. .testPosition .box.parent {
  18. width: 400px;
  19. height: 400px;
  20. background-color: lightcyan;
  21. }
  22. .testPosition .box.child {
  23. padding: 20px;
  24. }
  25. .testPosition .box.child.one {
  26. background-color: yellow;
  27. }
  28. .testPosition .box.child.two {
  29. background-color: lightcoral;
  30. }
  31. .testPosition .box.child.three {
  32. background-color: lightgreen;
  33. }
  34. .testPosition .box.child.four {
  35. background-color: rgb(144, 146, 238);
  36. }
  37. /* 1. 相对定位 */
  38. .testPosition .box.child.one {
  39. position: relative;
  40. top: 2px;
  41. left: 20px;
  42. }
  43. /* 2. 绝对定位 */
  44. .testPosition .box.child.two {
  45. position: absolute;
  46. top: 2px;
  47. right: 20px;
  48. }
  49. /* 3. 固定定位 */
  50. .testPosition .box.child.three {
  51. position: fixed;
  52. right: 50px;
  53. bottom: 100px;
  54. }
  55. /* 4. 粘性定位 */
  56. .testPosition .box.child.four {
  57. position: sticky;
  58. position: -webkit-sticky;
  59. top: 10px;
  60. }
  61. .testPosition {
  62. position: relative;
  63. }
  64. .testPosition .box.parent {
  65. position: static;
  66. }
  67. </style>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议