position属性规定元素的定位类型。这个属性定义创建元素布局所用的定位机制。任何元素均可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素自己是什么类型。相对定位元素会相对于它在正常流中的默认位置偏移。
position属性有五个可选值,分别是absolute、fixed、relative,static,inherit.css
relative是相对于其正常文本流中的位置进行偏移。以下代码:html
<html lang="en"> <head> <style type="text/css"> #item1 { width:100px; height:100px; background-color:green; } #item2 { width:100px; height:100px; background-color:red; } </style> </head> <body> <div id="content"> <div id="item1" >item1</div> <div id="item2">item2</div> </div> </body> </html>
上述代码显示结果以下:浏览器
若把上述代码中css样式文件改成:布局
#item1 { width:100px; height:100px; background-color:green; } #item2 { width:100px; height:100px; background-color:red; position:relative; left:20px; top:20px; }
显示结果以下:spa
总结:relative是相对正常文档流的位置进行偏移,原先占据的位置依然存在,也就是说它不会影响后面元素的位置。left表示相对原先位置右边进行偏移,top表示相对原先位置下边进行偏移。当left和right同时存在,仅left有效,当top和bottom同时存在仅top有效。relative的偏移是基于对象的margin左上侧的。3d
为了便于观察,现将上述原始网页代码最外层div加上margin值。code
#content { margin-left:100px; margin-top: 100px; }
正常显示以下:
当修改css样式文件以下时:htm
#item1 { width:100px; height:100px; background-color:green; } #item2 { width:100px; height:100px; background-color:red; position: absolute; left:20px; top:20px; } #content { margin-left:100px; margin-top: 100px; }
显示结果以下:对象
因而可知当父级元素的position属性值为默认值时(static),absolute是相对于浏览器窗口进行定位的。
若是设置content的position属性值为非默认值,那么absolute就是相对于该父级元素进行定位:blog
#content { margin-left:100px; margin-top: 100px; position: relative }
显示效果以下图所示:
当修改css样式以下时:
#item1 { width:100px; height:100px; background-color:green; } #item2 { width:100px; height:100px; background-color:red; } #content { margin-left:100px; margin-top: 100px; position:absolute; padding:20px; border:10px solid black; }
显示结果为:
注意到变化了吗,当把外层div设置为absolute时,外层div宽度由原来的100%变为auto.
当把一个元素position属性设置为absolute或fixed的时候,会发生三件事:
当修改css样式文件以下时:
#item1 { width:100px; height:100px; background-color:green; } #item2 { width:100px; height:100px; background-color:red; position:absolute; left:20px; top:20px; } #content { margin-left:100px; margin-top: 100px; position:absolute; padding:20px; border:10px solid black; }
显示效果以下:
因而可知,若是parent设定了margin,border,padding等属性,那么这个定位点将忽略padding,将会从padding开始的地方(即只从padding的左上角开始)进行定位,这与咱们会想固然的觉得会以margin的左上端开始定位的想法是不一样的。
fixed是特殊的absolute,即fixed老是以body为定位对象的,按照浏览器的窗口进行定位。