getComputedStyle 给出“透明”而不是实际的背景颜色

Posted

技术标签:

【中文标题】getComputedStyle 给出“透明”而不是实际的背景颜色【英文标题】:getComputedStyle gives "transparent" instead of actual background color 【发布时间】:2014-05-17 13:31:52 【问题描述】:

这是一个惊喜。以下代码似乎没有给我屏幕上的实际颜色:

h1 = document.querySelector("h1");
window.getComputedStyle(h1).color

给出rgb(0, 0, 0),我认为这是正确的。不过

window.getComputedStyle(h1).backgroundColor

给出rgba(0, 0, 0, 0)。我在屏幕上看到的实际背景颜色是白色。

我称之为 h1 的元素在屏幕上可见。我期待得到实际的背景颜色。我上面得到的值(在 rgba 中)没有错,但也不是很有用。它只是告诉我背景是完全透明的——那不是颜色。

如何获得 RGB 中的实际背景颜色?

【问题讨论】:

尝试使用dom遍历,如果当前元素的bg是透明的则检查父元素等等。 感谢@Tony,但 getComputedStyle 应该正是如此。 @Leo:你认为为什么应该这样做? 一个很好的问题,@Bergi。我现在意识到background-color 与其他值有点不同,因为它取决于父元素的background-color 之外的许多其他东西。在另一个元素上测试,<span>,即使实际背景是黄色的,我也会再次得到这个rgba(0,0,0,0)。不涉及positionfloat 等。该元素位于具有 CSS 黄色背景的包含元素的框内。但是,我可以看到决定返回rgba(0,0,0,0) 的原因。 但是@Bergi,它仍然阻止我做我想做的事情。我想获得前景色和背景色之间的对比,以便我可以测试这部分的可访问性。现在看来,我认为这在 javascript 中是不可能的。 【参考方案1】:

如果您在 css 中设置背景颜色:rgba(255, 255, 255, 0); getComputedStyle() 将返回 transparent(在某些浏览器中)而不是您的 rgba 值。

解决此问题的简单方法是将 alpha 设置为高于 0 的值,例如 rgba(255, 255, 255, 0.01);这将返回 rgba(255, 255, 255, 0.01)

【讨论】:

问题出在 Firefox 上 :) 我浪费了一整天时间寻找 getComputedStyle 返回透明而不是 rgba 的原因【参考方案2】:

getComputedStyle(h1) 提供元素应用于活动样式表后的css值。

这意味着您可以获取那些仅以任何方式应用于特定元素的 css 值。

例如:- 如果您为h1 :RGB255, 255, 255, 应用了背景,那么您将获得 rgb 格式的背景颜色,否则不会。它不为 html 的默认样式提供值。

要通过getComputedStyle() 获取值,首先应该将其应用于元素。

欲了解更多信息getComputedStyle()

【讨论】:

嗯,谢谢,是的,这就是我看到的,当然,但是我如何获得 html 默认样式颜色值?

以上是关于getComputedStyle 给出“透明”而不是实际的背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

变速动画函数封装增加任意多个属性透明度和层级

window.getComputedStyle 不适用于除 Chrome 之外的其他浏览器中的速记属性

js 变速动画函数

js获取非行间样式

如何使我的网站背景透明而不使内容(图像和文本)也透明?

调整透明图像(UIImage)的大小而不获得黑色背景