css的定位是很多人容易困惑的地方,自己以前也是,随着时间慢慢的学习,自己有一些领悟,可以一起分享。

    css的定位有四种,static,relative,absolute,fixed。对于static就是正常的文档流,没有什么特别的。对与fixed总是以body为定位时的对象,总是根据浏览器的窗口来进行元素的定位,通过"left"、 "top"、 "right"、 "bottom" 属性进行定位。

在文档流中,每个块元素都会被安排到流中的一个位置,我们可以通过CSS中的定位属性来重新安排它的位置。定位分为相对定位和绝对定位,相对定位是相对于该块元素在文档流中的位置的,比如,我们可以使用相对定位把div2放到div1的右侧,CSS代码如下:#div1 {
                     border: 1px solid #000099;
                     height: 60px;
                     width: 200px;
                     margin:2px;
                   }
                   
                   #div2 {
                     border: 1px solid #000099;
                     height: 60px;
                     width: 200px;
                     margin:2px;
                     position: relative;
                     top: -64px;
                     left: 204px;
                   }
                   
                   #div3 {
                     border: 1px solid #000099;
                     height: 60px;
                     width: 200px;
                     margin:2px;

Div的定位_前端开发

    relative就是相对定位,第一:它总是相对于上一级的父元素定位。第二:他即使不在原来的文档流里但是还是占据原来的空间。

absolute就是绝对定位,第一:它是以浏览器窗口或者有相对定位或者绝对定位的上一级或者几级父元素而定位。第二:它并不在原来的文档流里占据空间。详细的请看转载的精华:

1、relative。定位为relative的元素脱离正常的文本流中,但其在文本流中的位置依然存在。如图1:

Div的定位_前端开发_02

图1

***背景的层定位为relative,红色边框区域为其在正常流中的位置。在通过top、left对其定位后,从灰色背景层的位置可以看出其正常位置依然存在。

2、absolute。定位为absolute的层脱离正常文本流,但与relative的区别是其在正常流中的位置不在存在。如图2:

Div的定位_前端开发_03

图2

可以看到,在将***背景层定位为absolute后,灰色背景层自动补上。

3、relative与absolute的主要区别:

首先,是上面已经提到过的在正常流中的位置存在与否。

其次,relative定位的层总是相对于其最近的父元素,无论其父元素是何种定位方式。如图3:

Div的定位_前端开发_04

图3

图中,红色背景层为relative定位,其直接父元素绿色背景层为默认的static定位。红色背景层的位置为相对绿色背景层top、left个20元素。而如果红色背景层定位为absolute,则情形如图4:

Div的定位_前端开发_05

图4

可以看到,红色背景层依然定义top:20px;left:20px;但其相对的元素变为定位方式为absolute或relative的***背景 层。因此,对于absolute定位的层总是相对于其最近的定义为absolute或relative的父层,而这个父层并不一定是其直接父层。如果其父 层中都未定义absolute或relative,则其将相对body进行定位,如图5:

Div的定位_前端开发_06

图5

除top、left、right、bottom定位外,margin属性值的定义也符合上述规则。