【发布时间】:2014-07-19 02:59:33
【问题描述】:
TL;DR
- 这是fiddle(谢谢@NicoO):在 Safari 中,初始的“红色”颜色会应用于
currentColor的所有其他实例。 - 如何使用 CSS 解决
currentColor的继承问题? - 或者如何检测对 CSS 颜色关键字
currentColor的支持? - 我还需要检测部分支持。例如,Apple Webkit 在大多数情况下使用不稳定。
全文
我在一个项目中使用 CSS 颜色关键字 currentColor。我可能会补充说,相当大量地使用它。例如:
我在浮动在全视口轮播上的站点标题组件上使用它。
每张幻灯片都有一个不同的
background-color和一个对比鲜明的color分配给它。 当幻灯片更改时,它会更新站点标题以通知它新的对比度。 站点标题的color被相应地交换,任何与inherit或currentColor关键字得到更新,例如<svg>的fill、一些border-colors 和一些background-colors。
另一个更简单的例子:
我有各种调色板作为班级名称应用 (例如,
bg--emerald或bg--blue)到盒子上。 这些框的内容可以是链接或按钮,也可以只是文本。 例如,将currentColor应用于按钮边框, CSS 变得非常简单,因为我只需要设置color每种配色方案的属性。 无需更新每个受影响的子节点。
这一切都非常巧妙。
在 Firefox、Chrome、Opera、Internet Explorer 9+ 及其“移动”等价物下的支持非常出色。不幸的是,Apple Webkit(iOS Safari 和 OSX Safari)的支持很差且不稳定。它并非无处不在,也不是一直有效——即使是在最简单的示例中——也不会在需要时很好地或始终如一地重绘。
我进行了一些搜索,但没有发现很多人使用这个实用的 CSS 关键字,因此没有现有的方法来检测它或填充它。我不知道我将如何为此功能进行 Modernizr 测试。尤其是检测部分支持,比如我需要 Apple Webkit。
我现在可能只是在浏览器中检测它,直到我能想到解决方案或偶然发现比我更快地想到解决方案的聪明人。
JSFiddle
我已经修改了小提琴(上面链接)以大致复制我遇到的问题。我注意到它就像currentColor 被最初继承的值(“红色”)锁定并在应用于其他所有内容时携带它。例如,如果您将:nth-child(1) 的color 切换为其他值,则使用currentColor 将新值应用于所有后续元素。
浏览器
坏了
- OSX,Safari 6–7
- iOS 6-7,Safari
作品
- Windows、Safari 5
- iOS 5、Safari
Safari 6 及更高版本中的某些内容被破坏了。由于这是一个被低估的功能,所以没有人注意到。
【问题讨论】:
-
这个功能我没用过,不过挺有意思的。这是小提琴jsfiddle.net/RDf4m/1。您是否仅在使用 Javascript 更改颜色时遇到问题,或者页面重新加载时的行为是否也不一致?更新:这个小提琴适用于我在 iOS 上的当前 safari。
-
@NicoO 我更新了小提琴以说明一些问题,这也让我意识到究竟是什么问题,尽管我仍然不明白为什么:jsfiddle.net/RDf4m/2
-
请注意,边框和框阴影已经默认为
currentColor,但settingcurrentColorexplicitly anyway seems to resolve certain issues with non-Safari browsers。 -
看起来他们刚刚在 Webkit 代码库中修复了你大约 10 个月大的 bug report ——所以感谢 @Chauncey 向他们报告,并希望它能够进入 Safari很快。 (可能是 Webkit/Blink 分裂的牺牲品,因为 the equivalent Chromium bug 已于 2013 年 6 月报告并及时修复。)