【发布时间】:2015-04-01 20:35:57
【问题描述】:
我正在尝试使用 CSS currentColor 作为边框颜色,以使用 :after 内容生成 CSS 三角形。这在我尝试过的所有浏览器中都非常有效,除了一个:Safari 似乎正在缓存它生成的第一个三角形中的 currentColor,然后在任何地方使用它。
这是我所看到的——Chrome(以及 Firefox 和 IE9+)的预期行为:
Safari 8.0.4 在 Yosemite 10.10.2 上的错误行为(在 iOS 8.2 上相同)——注意所有三个三角形都是红色的,而不是它们元素的 currentColor:
这是 a fiddle with the full code 演示问题。 相关的 CSS:
span {
display: inline-block;
border-bottom: 2px solid currentColor;
}
span::after {
/* Generate a triangle (based on Foundation's css-triangle mixin) */
content:"";
display: inline-block;
width: 0;
height: 0;
border: inset 0.4em;
/* Safari seems to cache this currentColor... */
border-color: currentColor transparent transparent transparent;
border-top-style: solid;
}
.red { color: #c00; }
.blue { color: #009; }
HTML 很简单:
<div>
<span class="red">Red</span>
<span>Default</span>
<span class="blue">Blue</span>
</div>
这是 Safari 中的错误吗?关于 CSS 规范的解释问题?
更重要的是,有任何解决此问题的建议吗?我不想必须在单独的 :after 规则中为每个元素显式声明颜色。 (使用 currentColor 确实简化了维护,因为我们的其他 CSS 发生了变化。)
【问题讨论】:
-
这可能类似于this question,它使用currentColor 和其他CSS 选择器。但到目前为止,唯一的回应声称这是预期行为(这似乎与所有其他浏览器实现冲突),或者建议完全避免 currentColor(我认为这不适用于我的情况)。
标签: css safari mobile-safari