html - CSS 绝对位置偶尔不受尊重

标签 html css positioning

CSS:

.layers {
    position: relative;
    height: 500px;
    width: 500px;
    /* Some -webkit and -moz transformations */
}
.layers > div {
    position: absolute;
    height: 500px;
    width: 500px;
 }
.item {
    position: absolute;
    width: 5px;
    height: 5px; 
}

HTML:

<article class="someclass">
    <section class="layers">
       <div style="/* -webkit and -moz transformations */">
           <img src='image.png'>
           <div class="item" style="/* -webkit and -moz transformations */">test</div>
       </div>
    </section>
</article>

加载此页面时,90% 的情况下,我会得到 image.png,上面有 test

(确切位置取决于转换) 另外 10% 的时间我尝试加载页面,加载 item div 就好像位置是静态的,这导致它不在图像的顶部。

我最好的猜测是它与首先加载的内容有关,因此可能没有确切的答案,但也许我在这里忘记了其他事情。

注意:我在 Chrome 和 Safari 上试过,结果相同。

最佳答案

不一致的行为是由于两件事造成的:第一,您没有为 .item 设置实际位置(例如顶部/左侧),第二,您的图像没有指定尺寸,因此浏览器在加载之前不会知道它的大小。

因为您没有指定位置,但是已经指定了绝对定位,所以 .item 元素是 defaulting to the values they would have if they were statically positioned .也就是说,它们将直接位于图像下方

我相信当您看到图像下方的 .item 时,那是因为图像在您的缓存中,因此浏览器在其初始布局运行时知道它有多大,并且设置图像下方 .item 的静态位置。

当您在图像顶部看到 .item 时,那是因为浏览器尚未计算出图像在其初始布局中的大小运行(即它仍在加载)所以它定位 .item 就像图像的高度为零一样。通常,一旦加载图像,就会重新计算布局,.item 会向下移动,但是因为您已将它们的定位指定为 absolute,我相信浏览器假设它不需要重新定位它们,因为图像大小不应该影响它们的定位,因为它们已经脱离了正常的布局流。

无论如何。为您的绝对定位元素指定一个实际位置,一切都应该开始工作。

关于html - CSS 绝对位置偶尔不受尊重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21956567/

相关文章:

html - 图像超出容器 div 边界

HTML/CSS - 根据可用元素更改布局

javascript - div 在位置 :fixed and position:absolute during scrolling 之间移动

html - 使用图像时使文本在 li 和 ul 标签中垂直居中

css - 如何根据 bool 值在 Rails 中创建动态 CSS?

css - float div 中的格式化列表

html - Z-index 在子导航中不起作用

html - 当我打印我的页面时,IE 将白色文本颜色更改为灰色

javascript - 如何通过标题向上/向下滑动来降低所有元素?

html - 是否可以通过父级最大值设置最大图像尺寸?