【问题标题】:Firefox ::-moz-selection selector bug(?) is there a workaround?Firefox ::-moz-selection 选择器错误(?)有解决方法吗?
【发布时间】:2011-07-15 04:51:25
【问题描述】:

我正在开发一个拥有大量颜色样式的网站,大约 250 行 CSS 来定义 7 种配色方案之一,因此我尽可能将各种颜色规则归为一组,这一点很重要。

当我尝试堆栈与已弃用的 CSS3 ::selection 伪元素相关的选择器时,最新的 Firefox 4 RC 表现不佳。

这行得通:

.green ::-moz-selection {
    /* 'Pure Hue' Color */
    background-color: #62BA21;
    color: white;
}

但是一旦我尝试与 webkit 的选择器共享规则,它就会中断。

不适用于 FireFox:

.green ::selection, .green ::-moz-selection {
    /* 'Pure Hue' Color */
    background-color: #62BA21;
    color: white;
}

我知道他们可能没有解决这个错误,因为 ::selection 不再出现在工作草案中,但我希望我不必为了这个怪癖而让我的 CSS 变得臃肿。

【问题讨论】:

  • ::selection 本身并没有被弃用。它刚刚从选择器规范中删除。不确定它是否被完全删除或其他什么,但它在现代版本的浏览器中得到了很好的实现。我必须与 CSS WG 核实一下。
  • 所以,我有点错了——它在浏览器中的实现是不稳定的,充其量是非常不一致的。我不确定供应商是否正在积极处理与::selection 相关的任何票证,此时等待未来规范(UI 级别 4?)中的重新定义。

标签: html firefox css css-selectors


【解决方案1】:

Firefox 似乎根本无法理解::selection(因此需要以供应商为前缀的::-moz-selection),因此它会忽略遇到无法识别的选择器per the spec 的整个规则。

浏览器不理解组中的一个或多个选择器的常见解决方法是拆分/复制规则集:

/* Firefox sees this */
.green ::-moz-selection {
    background-color: #62BA21;
    color: white;
}

/* Other browsers see this */
.green ::selection {
    background-color: #62BA21;
    color: white;
}

事实上,在这种情况下,这是你唯一能做的事情,也就是说,你将不得不忍受这种轻微的膨胀。

jsFiddle demo

【讨论】:

  • 有趣,我知道如果它遇到无法识别的选择器时会出现这种情况,但我认为将它放在首位或用逗号分隔两者可以让它发挥作用,但我不知道这一点(形成您链接的工作草案部分):“CSS 2.1 为选择器中的逗号 (,) 赋予了特殊含义。但是,由于不知道逗号在未来的 CSS 更新中是否会获得其他含义,因此整个声明如果选择器中的任何地方出现错误,则应该忽略它,即使选择器的其余部分在 CSS 2.1 中看起来很合理。”感谢您的帮助!
猜你喜欢
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多