【发布时间】:2021-07-04 09:39:56
【问题描述】:
我正在解析getComputedStyle 返回的颜色字符串,以从中获取R、G、B 和A 值。
到目前为止(在 Chrome 和 Firefox 中),颜色值似乎总是以易于解析的 rgb 或 rgba 格式返回:
const [, r, g, b, a] = str.replace(/\s/g, "").match(/rgba?\((\d+(?:\.\d+)?),(\d+(?:\.\d+)?),(\d+(?:\.\d+)?)(?:,(\d+(?:\.\d+)?))?\)/i);
但是,我无法在 any 的 specs 中找到任何关于颜色格式的承诺,因为 getComputedStyle 列在其 MDN page 上。
getComputedStyle的颜色格式有保证吗?还是完全取决于浏览器的实现?
我宁愿不必检查 HEX 和 HSLA 值(以及其他任何可能的值 - 我不完全确定)。
编辑:
用于在控制台中测试颜色值的快速 sn-p 代码:
console.log((str => {
const div = document.createElement("div");
div.style.backgroundColor = str;
document.body.append(div);
return getComputedStyle(div).backgroundColor;
})("magenta"));
【问题讨论】:
-
我相信自从 IE6(十六进制)以来,一切都只返回了 RGB/A,但我找不到任何官方文档来支持它。
-
@DBS 是的,这就是我现在所处的位置。很有信心我可以摆脱它,但要寻找最后 10% 来帮助我晚上睡个好觉:)
-
透明会发生什么? (我认为,从技术上讲,这与任何 rgba 组合都不相同)。
-
@AHaworth 在 FF:
rgba(0, 0, 0, 0) -
@AHaworth 我已经包含了一个用于测试颜色的代码 sn-p
标签: javascript css getcomputedstyle cssom css-color