组合伪元素选择器(用于范围输入)时,我看到未应用样式。这迫使我将我的选择器分开并复制我的CSS。
有谁知道为什么会发生这种怪癖?
/* Keeping the selectors separate works */
.range1 {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.range1::-webkit-slider-runnable-track {
height: 6px;
border-radius: 3px;
border: 1px solid black;
}
.range1::-moz-range-track {
height: 6px;
border-radius: 3px;
border: 1px solid black;
}
/* Combining the selectors fails */
.range2 {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
.range2::-webkit-slider-runnable-track,
.range2::-moz-range-track {
height: 6px;
border-radius: 3px;
border: 1px solid black;
}
CodePen示例。
答案 0 :(得分:3)
您正在将多个特定于供应商的选择器组合到一个CSS规则中。
这意味着如果浏览器无法识别一个选择器,则忽略整个CSS块。在这种特殊情况下,Chrome无法识别::-moz-range-track
,因为它特定于Firefox / Gecko。这不是一个怪癖,而是预期的行为和part of the CSS standard。
解决方案是拆分声明。像这样:
.range2::-webkit-slider-runnable-track {
height: 6px;
border-radius: 3px;
border: 1px solid black;
}
.range2::-moz-range-track {
height: 6px;
border-radius: 3px;
border: 1px solid black;
}
答案 1 :(得分:0)
我认为用户代理无法识别伪元素选择器,因为它应该以{{1}}开头,在这种情况下,您要组合多个选择器,因此它不适用于某些/所有浏览器。
选择器始终与{} -block一起使用。当用户代理无法解析选择器时(即,它不是有效的CSS3),它也必须忽略{} -block。
https://www.w3.org/TR/CSS21/syndata.html#rule-sets
选择器包含第一个左大括号({)的所有内容(但不包括)。选择器总是与声明块一起使用。当用户代理无法解析选择器时(即,它不是有效的CSS 2.1),它必须忽略选择器和以下声明块(如果有的话)。