CSS绝对定位的奥秘

5
考虑下面的网页。 <img> 相对于其父元素绝对定位,当我在 Safari 或 Firefox 上加载此页面时,<img> 出现在右上角,如预期一样(请参见第一张图片)。 但是,如果从 <div> 中删除边框,例如通过设置 border-width: 0<img> 将绝对相对于其兄弟元素 <p> 定位! 请参见图片#2。 为什么会这样?边框会产生什么差异?
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<style type="text/css">
body {
    margin: 0;
}
div {
    position: relative;
    left: 0;
    top: 0;
    border: 1px solid red;
}
img {
    position: absolute;
    right: 0;
    top: 0;
}
p {
    margin: 20px;
}
</style>

</head>
<body>
    <div>
        <img src="content/en/flag.png" />
        <p>This is a test</p>
    </div>
</body>
</html>

absolutely relative to div absolutely relative to p


尝试使用CSS重置,然后检查页面。http://meyerweb.com/eric/tools/css/reset/ - Alon
2个回答

2
您的图像始终位于右上角。这与折叠边距有关。
尝试使用背景颜色来实现。您会发现您的
从的顶部移开了几个像素。如果您删除

的边距,一切都会很好,或者将

设置为内联元素或浮动它,甚至为父级设置overflow:auto、hidden或scroll。对抗折叠边距的另一种方法是向容器元素添加边框。所以您确实是通过那个边框来解决这个问题的。

但是图像总是在它应该的地方。

你也可以为父元素设置 padding-top: 1px; : https://dev59.com/1nI-5IYBdhLWcg3wn5y5 - Hashem Qolami
谢谢,我不知道折叠边距的事情。 - Steveo

0

确实非常奇怪,但让我试着解释一下。实际上这些元素并不是浮动的,而你在p标签上使用了margin。当div有边框时它可以正常工作,但是当边框被移除时就会失败,如果添加float属性,那么div也将获得其高度。

添加overflow:auto;到div中,它会修复这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接