静态定位:
HTML元素的默认值,即没有定位,元素出现在正常的流中。
静态定位的元素不会受到top,bottom,left,right影响。
固定定位:
元素的位置相对于浏览器窗口是固定位置。
margin-bottom 和margin-right的值不再对文档流中的元素产生影响,因为该元素已经脱离了文档流。另外,不管它的祖先元素有没有定位,都是以文档流中原来所在的位置上偏移参照物。
图9中,使用margin属性布局相对定位元素。
层级关系为:
<div ——————————— position:relative不是最近的祖先定位元素,不是参照物
<div—————————-没有设置为定位元素,不是参照物
<div———————- position:relative 参照物
<div box1
<div box2 ——–position:absolutetop:50pxleft:120px
<div box3
之前遇到过 fixed 布局嵌套的一些场景, fixed 布局是针对 body 定位的,但是在某些特殊情况下,子级的 fixed 会受到父级 fixed 的影响,除了需要 z-index 来区分层级,还要注意 transform 的使用(貌似好多地方 transform 都会引发问题)
一般的场景是一个遮罩加一个弹框
效果是这样的
这个时候在内部的 children 再使用 fixed 布局时,就会被父级的 fixed 元素限制住
1、父级不使用 tansform
2、不进行嵌套
层级关系的布局有两种解决方法:一种方法是使用标签的自然顺序和嵌套顺序来形成合理的布局。
而第一种方法却不是万能的,有时候我们需要将原本位于下层的元素移到另一个元素上方,那可以使用z-index;
当你定义的CSS中有position属性值为absolute、relative或fixed,
用z-index此取值方可生效。
此属性参数值越大,则被层叠在最上面。
例子:
<html>
<head>
<style>
.z1,.z2,.z3{position:absolutewidth:200pxheight:100pxpadding:5px 10pxcolor:#ffftext-align:right}
.z1{z-index:1background:#000}
.z2{z-index:2top:30pxleft:30pxbackground:#C00}
.z3{z-index:3top:60pxleft:60pxbackground:#999}
</style>
</head>
<body>
<div class="z1">z-index:1</div>
<div class="z2">z-index:2</div>
<div class="z3">z-index:3</div>
</body>
</html>
上面三个CSS,将根据z-index的值决定谁在最上层!