问答详情
源自:13-6 万事无绝对 -层模型之绝对定位

关于绝对定位排列的问题

<!DOCTYPE HTML>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<title>absolute样式</title>

<style type="text/css">

#ab{

    position:absolute;

}

#abc{

position:absolute;

left:20px;

}

#abcd{

position:absolute;

left:100px;

}

</style>

</head>


<body>

<div id="ab">son</div>

<div id="abc">father</div>

<div id="abcd">grandfather</div>

</body>

</html>

为什么这三个<div>显示在同一行上?

提问者:qq_一生之久_0 2016-04-07 16:39

个回答

  • qq_徵羽kid
    2016-04-07 17:30:12
    已采纳

    我们先来看一下绝对定位的含义:

    层模型--绝对定位

    如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行绝对定位。如果不存在这样的包含块,则相对于body元素,即相对于浏览器窗口。

    你设置这三个div没有设定一个具有定位属性的父元素,所以,他们就默认的是body元素,即浏览器窗口。

    你设置了如下的css样式

    #ab{

        position:absolute;

    }

    #abc{

    position:absolute;

    left:20px;

    }

    #abcd{

    position:absolute;

    left:100px;

    }

    那么显示的结果就是三个元素都会在一行,原因很简单,绝对定位的元素的位置相对于最近的已定位祖先元素,如果元素没有已定位的祖先元素,那么它的位置相对于最初的包含块。就是说abc这个div会向右移动20px abcd会向右移动100px,但是同时绝对定位使元素的位置与文档流无关,因此不占据空间,所以三个div还是会显示在同一行。

  • qq_听风挽笑_03119131
    2016-04-07 16:58:03

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

     .relative{ position: relative;  background:purple;  width:50px;  height: 50px;  left: 80px; } 

    这个框会出现在跟原来的位置向右80px的地方,原来的位置为空,

    如果position: relative改成position: absolute,

    则这个框的原来空间会被下面的框所覆盖。

    经对定位:绝对定位使元素的位置与文档流无关,因此不占据空间。这一点与相对定位不同,相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。

    .box{  width:300px;  height: 300px;  margin: 0 auto;  border: 1px solid orange;  position: relative; } 

    .relative{  position:absolute;  background:purple;  width:50px;  height: 50px;  left: 80px;}

    box是relative的父元素,标识为relative 的框会出现在向右 80px的地方,

    但是如果父元素box没有定位属性,它则会相对body进行定位,位置会大变,会脱离box框。