【问题标题】:::selection background-color and color rendering in browsers::在浏览器中选择背景颜色和颜色渲染
【发布时间】:2012-06-19 23:42:05
【问题描述】:

问题

-webkit--moz- 浏览器中使用以下内容根本无法正常工作:

#exampleElement {
    background-color: red; /* For example */
}

#exampleElement ::selection {
    color: black;
    background-color: white;
}

 

结果:支持 WebKit 和 Blink 的浏览器

在 Chrome、Opera 和 Safari 中,::selectionbackground-color 呈现为 50% 的 alpha 但字体颜色正确。

Chrome 29.0.1547.62:

Opera 15.0.1147.130:

Safari 5.34.57.2:

 

结果:Gecko 驱动的浏览器

在 Firefox 中,整个 ::selection 规则被忽略。 ::selectionbackground-color 恰好是白色的,因为 #exampleElement 的黑暗 background-color (感谢@BoltClock 注意到这一点)

Firefox 22.0:

 

结果:支持 Trident 的浏览器

在 Internet Explorer 中,(您相信吗)一切都完美呈现。

Internet Explorer 10.0.9200.16660:

 

这只是这些渲染引擎/浏览器的一个缺陷,还是有我不知道的 -webkit--moz- 替代方案?

我在 jsFiddle 上保存了一个示例,供人们查看:http://jsfiddle.net/BWGJ2/

【问题讨论】:

  • 是的,看起来很神奇,IE9 确实可以工作
  • Firefox 实际上忽略了整个 ::selection 规则 - 如果它确定父背景足够暗而不能使用蓝色作为其默认高亮背景,则它发生为白色背景。
  • @BoltClock 很好的定位。我会更新我的问题。

标签: css google-chrome firefox selection background-color


【解决方案1】:

根据quirksmode.org-webkit-selection-moz-selection 确实可用。我刚刚使用 Chrome (18) 和 Firefox (13) 对其进行了测试,并且可以确认它可以与 Firefox 一起使用,但我在 Chrome 上使用-webkit-selection 没有成功(它忽略了它),并且根据this SO question 它没有'不存在(答案说::selection 应该也适用于所有浏览器,但也不适合我)。

正如this answer 中已经提到的,Chrome 强制选择透明,但您可以使用

background:rgba(255, 255, 255, 0.99);

欲了解更多详情,请查看 tw16 的链接答案


此外,这在 FF 上对我有用:

::selection { /* stuff */ }
::-moz-selection { /* stuff */}

但这不是:

::selection, ::-moz-selection { /* stuff */ }

但也许这与::selection 无关,但适用于所有伪元素,无法找到答案。

【讨论】:

【解决方案2】:

browser-dependent versions。您使用的版本是标准的 CSS3 方式,但后来它得到了dropped from the spec。我不知道它的浏览器支持...

还有其他需要考虑的事情:基于 ID 的 CSS 选择器可能会“outweigh”基于伪类的选择器,从而导致基于 ID 的 CSS 始终优先。因此,请尝试将 !important 添加到您的 ::selection 样式中,以确保在适用时始终使用它。

希望有帮助!

【讨论】:

  • 奇怪的是,使用适当的依赖于浏览器的版本同样无效,有时甚至效果更差。jsfiddle.net/MythOfEchelon/a9ZZ5/3
  • @BenHooper - Mozilla 特定版本(错误地应用于“Webkit”div)是唯一对我有用的版本(Fedora 上的 Firefox 12.0)。至少,它确实正确地覆盖了基于 ID 的选择器。我确实有时讨厌浏览器...
  • 它被删除是因为它在 CSS3 中的定义充其量是不完整的,所以从来没有真正的“标准”可以遵守。另外,::selection 是一个伪元素,它的权重比伪类还要小。
猜你喜欢
  • 2015-11-18
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 2018-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多