最近在弄到一个html定位的问题,很是头疼,因此在此小记,以便后查.

首先看看HTML中的定位的标准定义:

说明

这个属性定义建立元素布局所用的定位机制。任何元素都可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素本身是什么类型。相对定位元素会相对于它在正常流中的默认位置偏移。

 

可能的值

描述
absolute

生成绝对定位的元素,相对于 static 定位以外的第一个父元素进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

fixed

生成绝对定位的元素,相对于浏览器窗口进行定位。

元素的位置通过 "left", "top", "right" 以及 "bottom" 属性进行规定。

relative

生成相对定位的元素,相对于其正常位置进行定位。

因此,"left:20" 会向元素的 LEFT 位置添加 20 像素。

static 默认值。没有定位,元素出现在正常的流中(忽略 top, bottom, left, right 或者 z-index 声明)。
inherit 规定应该从父元素继承 position 属性的值。

 

下面重点说absolute和relative.从上面的定义,我做了如下的测试

代码如下:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title></title>
 5     <meta http-equiv="content-type" content="text/html;charset=utf-8;" />
 6     <style type="text/css">
 7         *{font-size: 12px;}
 8         .wrap{border:1px solid #ff0; margin:100px auto; width:800px; padding:5px; height: 500px;}
 9         .normal{ border:1px solid #f00; width: 200px; height:200px;}
10         .relative{position: relative; left: 10px; top: 10px; }
11         .split{width:380px;border: 1px solid #000; float:left; height:480px; margin: 4px;  padding:5px;}
12     </style>
13 </head>
14 <body>
15     <div class="wrap">
16         <div class="split">
17             <div class="normal"></div>
18             <div class="normal"></div>
19         </div>
20         <div class="split">
21         <div class="normal"></div>
22         <div class="normal relative"></div>
23         </div>
24     </div>
25 </body>
26 </html>

 

实际的效果如下:

因此有此结论,所谓的相对,就是当该元素没有设置相对定位以及left(right)和top(bottom)时(即按照文档流的布局所在位置),以left(right)和top(bottom)设定的值相对与该位置进行定位.

关于绝对定位,我们不难从上述定义看出,当所有的祖先都没有指定position属性时(即默认值为static),该元素将根据left(right)和top(bottom)相对与跟元素进行定位.否则按照最近一个position不为static的父元素根据left(right)和top(bottom)进行定位.

原谅我的虎头蛇尾,真的讲完了.                

posted on 2013-09-23 14:06  猴哥猴哥  阅读(332)  评论(0编辑  收藏  举报