我有一个奇怪的问题,在另一个div中定位一组div。我认为最好用图像来描述它:
在黑色(#box)div中,有两个div(.a,.b)必须放在同一个地方。我想要实现的是第一张图片,第二张是我得到的效果。看起来如果div没有清除或什么东西浮动,显然不是这种情况。任何想法都会受到欢迎!
以下是此示例的代码:
CSS:
#box {
background-color: #000;
position: relative;
padding: 10px;
width: 220px;
}
.a {
width: 210px;
position: absolute;
top: 10px;
left: 10px;
background-color: #fff;
padding: 5px;
}
.b {
width: 210px;
position: absolute;
top: 10px;
left: 10px;
background-color: red;
padding: 5px;
}
#after {
background-color: yellow;
padding: 10px;
width: 220px;
}
HTML:
<div id="box">
<div class="a">Lorem</div>
<div class="b">Lorem</div>
</div>
<div id="after">Hello world</div>
答案 0 :(得分:37)
position: static
,这意味着元素未定位并出现在文档中通常的位置。通常您不会指定此项,除非您需要覆盖之前设置的定位。position: relative
,则可以使用顶部或底部,左侧或右侧来移动元素相对于文档中通常出现的位置。position: absolute
时,该元素将从文档中删除,并准确放置在您告诉它的位置。因此,关于你的问题,你应该将包含块定位为相对的,即:
#parent {
position: relative;
}
你应该将子元素置于父元素中,如下所示:
#child {
position: absolute;
}
答案 1 :(得分:29)
绝对div从文档流中取出,因此包含div除了填充之外没有任何内容。给#box一个高度来填充它。
#box {
background-color: #000;
position: relative;
padding: 10px;
width: 220px;
height:30px;
}
答案 2 :(得分:7)
#a
或#b
中的一个必须不是position:absolute
,因此#box
会增长以适应它。
因此,您可以阻止#a
成为position:absolute
,并将#b
置于其顶部,如下所示:
#box {
background-color: #000;
position: relative;
padding: 10px;
width: 220px;
}
.a {
width: 210px;
background-color: #fff;
padding: 5px;
}
.b {
width: 100px; /* So you can see the other one */
position: absolute;
top: 10px; left: 10px;
background-color: red;
padding: 5px;
}
#after {
background-color: yellow;
padding: 10px;
width: 220px;
}
<div id="box">
<div class="a">Lorem</div>
<div class="b">Lorem</div>
</div>
<div id="after">Hello world</div>
(请注意,我的宽度不同,所以你可以看到另一个。)
在Justine的评论之后编辑:然后你唯一的选择是指定#box的高度。这样:
#box {
/* ... */
height: 30px;
}
假设a和b的高度是固定的,完美地工作。请注意,您需要通过在HTML顶部添加doctype来将IE置于标准模式
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
在此之前正常工作。
答案 3 :(得分:6)
问题在this article中描述(以及其他)。
#box
相对定位,这使其成为页面“流”的一部分。您的其他div绝对定位,因此它们将从页面的“流程”中删除。
页面流意味着元素的定位会影响流中的其他元素。
换句话说,当#box
现在看到dom时,.a和.b不再是“内部”#box
。
要解决这个问题,你可能希望将所有内容都设为相对的,或者一切都是绝对的。
一种方法是:
.a {
position:relative;
margin-top:10px;
margin-left:10px;
background-color:red;
width:210px;
padding: 5px;
}