css中position属性(absolute/relative/static/fixed)

来源:互联网 发布:印章大师安装软件 编辑:程序博客网 时间:2024/05/17 02:38
转载博客地址:http://www.jb51.net/web/77495.html

position:static   无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。
position:relative 对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
position:absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
position:fixed对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。

文档流:将窗体自上而下分成一行行,并在每行中按从左到右的顺序排放元素,即为文档流。
使元素脱离文档流的情况:浮动  绝对定位 

(1)静态定位(static)

   无特殊定位,它是html元素默认的定位方式,即不设置元素的position属性时默认的position值就是static,它遵循正常的文档流对象,对象占据文档空间。该定位方式下,top,right,bottom,left,z-index属性是无效的。

(2)相对定位(relative)

  首相要弄清楚相对定位的“相对”的意思,这里的相对是相对什么呢?用下面一个简单的例子来说明:

 初始定位:



初始原图:

修改first元素的position属性

 <span style="white-space:pre"></span>.first{                    width:200px;                    height:100px;                    border:1px solid red;                    position:relative;                    top:20px;                    left:20px;               }               .second{                    width:200px;                    height:100px;                    border:1px solid blue;               }

偏移20px后:

虚线是初始的位置
从图中可以看出,相对定位相对的是它原本在文档流中的位置而进行的偏移,relative定位也是遵循了正常的文档流,它没有脱离文档,但是它的top/right/bottom/left是生效的,它还占有文档空间,并且占据的文档空间不会随top/right/bottom/left等属性的偏移而发生移动就是说它后面的元素是依据虚线位置(top/left/right/bottom)进行定位,这一点和很重要。

添加margin属性

<span style="white-space:pre"></span>.first{                    width:200px;                    height:100px;                    border:1px solid red;                    position:relative;                    top:20px;                    left:20px;                    margin:20px;               }       .second{                    width:200px;                    height:100px;                    border:1px solid blue;               }

设置margin:20px后:

 
将first外边距设置为20px后,second就会向下偏移40px, 注意这里的second不受 first经过设置top和left的影响,只是受到了margin的影响,例如,将first 的top设置为30px,那么显示的效果如下:

(3)绝对定位

使用absolute定位的元素脱离文档流之后,就只能根据祖先元素(父类以上)进行定位,并且这个祖先的类必须是posiiton为非static方式定位的,例如,a元素使用absolute定位,它会从父类找起,寻找以position非static方式定位的祖先类元素(一定是直系祖先),直到<html>标签为止。注意,relative和static方式在最外层时是以<body>标签为定位远点的,而absolute方式在无父级是position非static定位时是以<html>作为远点的<html>和<body>元素相差9px左右。

添加absolute属性  

<span style="white-space:pre"></span>.first{                    width:200px;                    height:100px;                    border:1px solid red;                    position:relative;               }       .second{                    width:200px;                    height:100px;                    border:1px solid blue;                    position:absolute;                    top:0;                    left:0;               }

效果图:

注意这里的::top:0; left:0;属性是必须添加的。

如果使用absoulte或fixed定位的话,必须指定 left、right、 top、 bottom 属性中的至少一个,否则left/right/top/bottom属性会使用它们的默认值 auto 这将导致对象遵从正常的HTML布局规则,在前一个对象之后立即被呈递简单讲就是都变成relative,会占用文档空间,这点非常重要,很多人使用absolute定位后发现没有脱离文档流就是这个原因,这里要特别注意。
不添加top:0; left:0;效果图如下:


在absolute定位中添加margin/padding属性

<span style="white-space:pre"></span>first{                    width:200px;                    height:100px;                    border:1px solid red;                    position:relative;                    margin:40px;                    padding:40px;               }       .second{                    width:200px;                    height:100px;                    border:1px solid blue;                    position:absolute;                    top:20px;                    left:20px;               }


效果图:

祖先类的margin会让子类的absolute跟着偏移,而padding却不会让子类的absolute发生偏移。absolute是根据祖先类的border进行定位的。

 注意 : 绝对(absolute)定位对象在可视区域之外会导致滚动条出现。而放置相对(relative)定位对象在可视区域之外,滚动条不会出现

(4)固定定位(fix)

它和absoult定位一样,都脱离了文档流,并且能够根据top、right、left、bottom属性进行定位,但不同的是fixed是根据窗口为原点进行偏移定位的,也就是说它不会根据滚动条的滚动而进行偏移。

z-index属性:

       z-index,又称为对象的层叠顺序,它用一个整数来定义堆叠的层次,整数值越大,则被层叠在越上面,当然这是指同级元素间的堆叠,如果两个对象的此属性具有同样的值,那么将依据它们在HTML文档中流的顺序层叠,写在后面的将会覆盖前面的。需要注意的是,父子关系是无法用z-index来设定上下关系的,一定是子级在上父级在下。

注意:使用static 定位或无position定位的元素z-index属性是无效的。

0 0
原创粉丝点击