在css布局中,position发挥了极其重要的作用,很多的网页布局都要用position来完成。position有四个属性值static、absolute、relative、fixed。

static

这个属性表示默认的位置,在设置它的时候,可以取消继承属性,在一般情况下则不需要设置这个属性。

absolute

这个属性表示绝对定位。绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置就会相对于最初的包含块。元素原先在正常文档流中所占的空间会关闭,就好像该元素原来不存在一样。就比如说,上一个块使用absolute定位之后,下一个快不设置,那么这两块就会重叠到一起。元素定位后生成一个块级框,不管它原来在正常流中生成何种类型的框。比如,对一个元素进行绝对定位,然后通过设置垂直或水平位置,让这个元素相对于它的起点进行移动。

如果将 top 设置为 10px,那么框将在包含它的容器顶部下面 10 像素的地方。如果 left 设置为 10 像素,那么框相对于它的容器左边框 向右素移动10像素。

relative

这个属性表示相对定位,设置为相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状,它原本所占的空间仍保留。

如果对一个元素进行相对定位,然后可以通过设置垂直或水平位置,让这个元素相对于它的起点进行移动。

如果将 top 设置为 20px,那么框将在原位置顶部下面 20 像素的地方。如果 left 设置为 30 像素,那么会在元素左边创建 30 像素的空间,也就是将元素向右移动。

fixed

这个属性表示固定定位,它用于相对于浏览器窗口定位,如果将 top 设置为 20px,那么框将在相对于窗口顶部下面 20 像素的地方,其他位置同理,也可以用百分比来表示位置。

它的效果是,不论如何拉动浏览器的滚动条,设置了该属性的元素不会改变位置。

下面这段代码,是我用定位做的一个布局。它的效果是:

如果我们能灵活运用position的几种属性,就能做出许多漂亮美观的布局。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
#big{
width:500px;
height:500px;
border:1px solid green;
position:relative;
}
#div1{
width:20px;
height:300px;
background:lightblue;
position:absolute;
left:239px;
top:200px;
}
#div2{
width:400px;
height:400px;
position:absolute;
left:50px;
top:0px;
}
#a{
width:200px;
height:200px;
position:absolute;
left:100px;
top:px;
}
#a1{
width:100px;
height:100px;
position:absolute;
left:100px;
background:yellow linear-gradient(135deg,white, yellow);
border-radius:0 100% 0 0;

}
#a2{
width:100px;
height:100px;
position:absolute;
left:100px;
top:100px;
background:yellow linear-gradient(30deg,white, yellow);
border-radius:0 0 100% 0;
}
#b{
width:200px;
height:200px;
position:absolute;
left:199px;
top:100px;
}
#b1{
width:100px;
height:100px;
position:absolute;
left:100px;
top:100px;
background:green linear-gradient(-45deg,white, green);
border-radius:0 0 100% 0;
}
#b2{
width:100px;
height:100px;
position:absolute;
left:px;
top:100px;
background:green linear-gradient(45deg,white, green);
border-radius:0 0 0 100% ;
}
#c{
width:200px;
height:200px;
position:absolute;
left:100px;
top:200px;
}
#c1{
width:100px;
height:100px;
position:absolute;
left:0px;
top:px;
background:purple linear-gradient(180deg,white, purple);
border-radius:100% 0 0 0;
}
#c2{
width:100px;
height:100px;
position:absolute;
left:0px;
top:100px;
background:purple linear-gradient(2deg,white, purple);
border-radius:0 0 0 100% ;
}
#d{
width:200px;
height:200px;
position:absolute;
left:0px;
top:100px;
}
#d1{
width:100px;
height:100px;
position:absolute;
left:100px;
top:0px;
background:red linear-gradient(270deg,white, red);
border-radius:0 100% 0 0;
}
#d2{
width:100px;
height:100px;
position:absolute;
left:px;
top:0px;
background:red linear-gradient(90deg,white, red);
border-radius:100% 0 0 0;
}
</style>
</head>
<body>
<div id="big">
<div id="div1"></div>
<div id="div2">
<div id="line1"></div>
<div id="line2"></div>
<div id="a">
<div id="a1"></div>
<div id="a2"></div>
</div>
<div id="b">
<div id="b1"></div>
<div id="b2"></div>
</div>
<div id="c">
<div id="c1"></div>
<div id="c2"></div>
</div>
<div id="d">
<div id="d1"></div>
<div id="d2"></div>
</div>
</div>
</div>
</body>
</html>