CSS和HTML定位的说明

时间:2018-06-01 13:49:38

标签: html css

我有以下代码:

.container {
  position: relative;
}

.topleft {
  position: absolute;
  top: 8px;
  left: 16px;
  font-size: 18px;
}

img {
  width: 100%;
  height: auto;
  opacity: 0.3;
}
<h2>Image Text</h2>
<p>Add some text to an image in the top left corner:</p>
<div class="container">
  <img src="https://www.w3schools.com/css/trolltunga.jpg" alt="Norway" width="1000" height="300">
  <div class="topleft">Top Left</div>
</div>

这是从w3学校复制的。运行此代码时,文本“左上角”出现在图像的左上角。

我需要了解原因。

在这种情况下,带有容器类的div用相对位置定义。

但是与Topleft类不同的Div不在IMG内部。它位于带有容器类的div内。

TOP LEFT文本如何定位在图像内部,而不是容器Div。 img不是TopLeft Div最近的祖先。

======================================

感谢您的评论。我认为这种行为的核心原因是以下事实:

绝对定位元素将从正常流中移除,并且可以重叠元素。

3 个答案:

答案 0 :(得分:3)

每当元素绝对定位时,它将自己从页面流中抬起。给定元素的任何定位属性将始终相对于包含元素的父元素。

在这种情况下,父元素 是容器div。此容器没有定位属性,因此将位于网页的左上角。

然后将topleft div从顶部放置8px,从容器div的同一角落放置16px。

图片没有定位,但恰好显示在父容器的左上角,位于定位文本下方。

通过向容器div添加边距值,您可以看到绝对定位的元素始终相对于其父元素。例如,如果应用50px的边距,则容器将从页面左上角向左和向下50个像素插入。图像和文本将相应移动。

答案 1 :(得分:0)

您的图片代码是内联的,意味着它不会被DIV块本身包围,因此图像是正常渲染的一部分,而div中的文本正好位于左上角位置:绝对。如果在两行周围放置单独的div块,则可以指定定位是绝对还是浮动等。

答案 2 :(得分:0)

我通过添加背景和填充进行了一些修改。 .topleft实际上是基于它的位置,包含父母在图像上的显示,因为图像已经整个容器。

&#13;
&#13;
.container {
    position: relative;
    background: tomato;
    height: 500px;
    padding: 30px;
}

.topleft {
    position: absolute;
    top: 8px;
    left: 16px;
    font-size: 18px;
     background: red;
}

img {
    width: 100%;
    height: auto;
    opacity: 0.3;
    background: black;

}
&#13;
<body>

<h2>Image Text</h2>
<p>Add some text to an image in the top left corner:</p>

<div class="container">
  <img src="https://www.w3schools.com/css/trolltunga.jpg" alt="Norway" width="1000" height="300">
  <div class="topleft">Top Left</div>
</div>

</body>
&#13;
&#13;
&#13;