position的四种定位和z-index的堆叠顺序

教程开始:

Position 有四种取值  static  relative  absolute  fixed

position:static 默认值,没有定位,元素出现在正常的标准流中;

position:fixed  固定定位 是相对于浏览器窗口来进行定位;(比较容易理解)

我们重点学习相对定位和绝对定位

 

首先让我们了解相对定位:

position:relative 相对定位  相对于其本身正常位置来进行定位,它原本所占的空间仍保留;

例如

依次建立div1,div2,div3 三个div块元素 给他们设置不同的背景色

div2 {position: relative; top:30px; left: 50px;}

 通过这个例子大家可以明白,相对定位是相对于文档流中本身的位置进行移动,同时它原本所占的空间仍保留。

由于div2设置为相对定位,所以它相对于文档流中本身的位置进行移动top:30px; left: 50px;

同时它将脱离标准流,漂浮在标准流之上,和标准流不是一个层次,不过会保留原先在文档流中的位置。

 

绝对定位的例子:

position:absolute 绝对定位 相对于定位方式不是static的第一个父元素进行定位(往上寻找参照元素,一直到根元素为止,即body),此时元素原先在正常

                   文档流中所占的空间会关闭,就像元素原来不存在一样,绝对定位后会生成一个块级框,而不管它原先在正常流中是何种类型。

div2 {position:absolute ; top:30px; left: 50px;}

从图中可以看出本来div1 div2 div3应该依次排列。

由于div2脱离了文档流, 同时它原本所占的空间没有被保留 ,它将脱离标准流 漂浮在标准流之上, 所以div3顶替上去。

由于div2没有父元素 ,所以div2只能相对于body偏移,如果div2向上追寻有父元素且不是static属性,则相对不是static属性的父元素偏移。

 

我们给div2添加一个父元素 不给所有的div设置任何属性时 所有的div是这样排列的。

我们改变div的属性

div2的父亲{position:relative;}

div2 {position:absolute ; top:30px; left: 50px;}

 

 

当我们给div2的父元素设置为position:relative 相对定位属性但是不赋值时div2的父元素偏移量都为0,则不偏移。

由于div2的父元素定位方式不是static,所以div2相对于div2的父元素偏移 top:30px; left: 50px;,不再相对于body偏移。

 

相对定位和绝对定位综合的例子:

我们改变div的属性

div2的父亲{position: relative;top: 100px;left: 80px;}
div2 {position:absolute ; top:30px; left: 50px;}

 

首先div2相对于原来在文档流中的位置相对定位偏移top: 100px;left: 80px;

由于div2的父元素定位方式不是static,所以div2相对于div2的父元素绝对定位偏移 top:30px; left: 50px;,不再相对于body偏移。

 

注意: 同时设置了left,right, 有冲突, 如 left: 50px; right:50px;   这时,它只会听从left 的, 位置是由left控制. 同理,当 top 和bottom  属性冲突时,由top 控制.

注意: 有一种常用的子元素在父元素内居的方式如下. 父元素相对定位, 子元素绝对定位,且四个属性全为0, margin 设为auto, 还要设置width, height 值.(若不设置宽高,子元素将覆盖父元素)

 

z-index的定义和用法

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

注释:元素可拥有负的 z-index 属性值。

注释:Z-index 仅能在定位元素上奏效(例如 position:absolute;)

 

我们没有改变div的属性时,所有的div是这样排列的。

 

 我们改变div的属性

div2的父元素{position: relative;}
div2{position: absolute;top: 30px;left: 50px;}
div2的兄弟元素{position: absolute;top: 60px;left: 70px;}

由于加载编译文档的顺序,div2的兄弟元素后加载,所以可以看到div2的兄弟元素堆叠在了div2之上。

  

 我们改变div的属性

div2的父元素{position: relative;}
div2{position: absolute;top: 30px;left: 50px;z-index: 100;}
div2的兄弟元素{position: absolute;top: 60px;left: 70px;z-index: 99}

 由于div2的z-index大于div2的兄弟元素,所以div2堆叠在div2的兄弟元素之上。

 

 

 

posted @ 2020-06-09 09:28  hayway  阅读(709)  评论(0编辑  收藏  举报