【问题标题】:The CSS all property working unexpectedly on iOSCSS all 属性在 iOS 上意外工作
【发布时间】:2018-05-20 08:12:25
【问题描述】:

意外行为特别适用于 color 属性:(AFAIK)

当一个元素具有all:inherit(或all: unset)时,iOS 不惜一切代价将该元素的颜色锁定为其继承(或初始)值 - 违反级联规则。

鉴于以下非常简单的标记

<div>Hi there</div>

使用 CSS:

body {
  color: red;
  border: 5px solid red;
}
div {
  all: inherit;
  color: green; 
  border: 5px solid green;
}

片段演示:(用 iPhone/iPad 等 iOS 设备打开查看问题)

body {
  color: red;
  border: 5px solid red;
}
div {
  all: inherit;
  color: green;
  border: 5px solid green; 

}
&lt;div&gt;Hi there&lt;/div&gt;

...我希望 div 的文本和边框的结果颜色都是绿色(这实际上是 Chrome 和 firefox 上的结果)但是在 iOS(10.3+)上*结果边框颜色为绿色,但文字颜色为红色!

一个更奇怪的 iOS 问题是,当元素具有 all:inherit(或未设置)时,似乎无法更改 descendant 元素的颜色!

片段演示:

body {
  color: red;
}
div {
  all: inherit;
}
.inner {
  color: green;
}
&lt;div&gt;Hi there &lt;span&gt;&lt;strong class="inner"&gt;inner element&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;

...所以在上面的 sn-p iOS 中将内部元素涂成红色!

注意:caniuse 表示 iOS Safari 从 9.3 版开始支持 CSS all 属性,并且不报告任何已知问题。

...所以:iOS 中有解决方法吗?

目前,由于这个问题,我看不到任何使用 all 属性的方法!


我测试了三款 iOS 设备:运行 iOS 10.3 的 iphone 6s、运行 iOS 11 的 iphone 7 和运行 iOS 11.1 的 iPad

【问题讨论】:

  • 这会影响 macOS 和 iOS 上的 Safari。
  • 有趣的是,如果你从边框声明中删除颜色(所以它说边框:5px 实心),Safari 将绿色应用于边框没有问题。
  • @BoltClock - 所以有一分钟我想我可以以某种方式使用currentColor 作为一种解决方法......but no success

标签: css safari


【解决方案1】:

根据这个答案 Why css "all: unset" works weirdly in Safari browser for MacOS?

似乎 Safari 使用 webkit-text-fill-color 覆盖了所有颜色属性。

所以自己使用 webkit-text-fill-color 来修复颜色是解决方法:)

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    相关资源
    最近更新 更多