我设置了一些 CSS 规则,例如:
.example {
color: white;
background-color: darkgray;
background-color: var(--bg-color);
background-color: rgb(from var(--bg-color) r g b / 0.5);
}
期望如果浏览器无法理解相当新的相对颜色语法(或相当古老但并不古老的var()
语法),我的元素仍然清晰易读。但在较旧的浏览器中,我仍然会得到透明(getComputedStyle($0).backgroundColor === rgb(0,0,0,0)
)背景,而不是我需要的较暗的背景,以实现易读性。
为什么这两者都是正确的?
- 浏览器不理解语法(从不使用相对颜色可以看出)
- 浏览器仍然使用该规则(证据是后备规则未被使用)
CSS Values 规范中关于“部分实现”的说明如下:
为了使作者能够利用向前兼容的解析规则来分配后备值,CSS 渲染器必须将任何 @ 规则、属性、属性值、关键字和其他语法结构视为无效(并酌情忽略),因为它们没有可用的支持级别。特别是,用户代理不得选择性地忽略不受支持的组件值,而应在单个多值属性声明中遵守支持的值:如果任何值被视为无效(因为不支持的值必须是无效的),CSS 要求忽略整个声明。
所以我的理解是,不理解或不支持我的相对颜色语法的浏览器应该忽略整个声明。那么为什么不使用较早的后备方法之一呢?