【问题标题】:Positioning: style and computed style have different values定位:样式和计算样式具有不同的值
【发布时间】:2013-07-25 17:54:28
【问题描述】:

在这个平台上的第一篇文章:)

我目前遇到百分比定位问题。我的元素的 top 属性的样式和计算的样式显示了不同的值:

  • 我在计算样式中看到的值是像素而不是样式表中定义的百分比
  • 值不同:如果我用计算的样式替换样式,元素会向下移动大约 40 像素。

这是我的代码:

<div id="container">
    <img id="img1" />
    <img id="img2" />
</div>

#container { position:relative; display:inline-block;}
#img1 { position:relative; }
#img2 { position:absolute; top:40% }

img1 高 600 像素。因为它有一个相对定位,container 得到它的高度。所以container 是 600px 高。如果我计算一下,#img2 的顶部位置(以像素为单位)应该是 240 像素。 但计算样式给了我 280 像素。为什么?

这件事发生在我容器中的几乎所有孩子身上,这让我发疯了!

有人知道发生了什么吗?

【问题讨论】:

    标签: css pixels computed-style


    【解决方案1】:

    来自MDN

    getComputedStyle() 给出一个元素的所有 CSS 属性的最终使用值。

    计算的样式值将始终是绝对值,因为它们代表给定元素的状态浏览器完成应用 CSS。


    编辑

    既然你已经提供了代码,我就可以回答你的具体问题了。

    #container 和您的图像上设置display: block

    计算的值是相对于包含文档的,而不是相对于元素的直接父级的。如果您截取屏幕截图并测量从#container 顶部到#img2 顶部的距离,您应该会看到它是正确的 240 像素。但是,top#img2 的计算值不一定是 240 像素。

    Here's a demo。蓝色矩形绝对定位在top: 40%;,它在其 600px 容器中正确地向下渲染 240px,但是如果您查看top 的计算值,它会报告一个不同的值,因为它是相对于视口的顶部,即在正文上设置了边距。

    【讨论】:

    • 您好安德烈,感谢您的帮助。计算出来的值怎么会和我的风格不同呢?绝对值和百分比之间有40像素的差异...
    • 因为经常创作值!=计算值。以像素为单位的计算值表示应用于文档的相对创作值的(绝对)计算位置。您是否注意到,当您将创作值更改为 40px 时,计算值也可能发生了变化?
    • 我认为这不是问题所在。当我将创作值更改为 40px 时,计算值为 40px。
    • 这完全正确——我说它可能也发生了变化。如果没有任何代码或演示您遇到的具体问题,就无法预测。
    • 我在#container 和我的图片上添加了 display:block,但不能解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-29
    • 1970-01-01
    • 2020-08-14
    • 2010-11-04
    • 2017-04-20
    • 1970-01-01
    相关资源
    最近更新 更多