在昨天Eric Bidelman在Google I / O演讲中谈到了主题之后@supports,我认为我将开始在Chrome Canary中使用它。但是,它提出了一个显而易见的问题:
@supports
检查浏览器是否@supports仅支持CSS 的最佳方法是什么?
我目前正在通过简单地检查是否display: block受支持来玩。显然,此方法有效,但是我不确定这是否是最实用的方法:
display: block
body { background:#fff; font-family:Arial; } body:after { content:'Ek! Your browser does not support @supports'; } @supports (display:block) { body { background:#5ae; } body:after { color:#fff; content:'Your browser supports @supports, yay!'; } }
这些尝试 无效 (至少在Chrome Canary中):
@supports (@supports) { ... } @supports () { ... } @supports { ... }
@supports目前仅测试属性/值组合,仅此而已。您的其他选项无效,因为它们都不有效(包括最后一个选项,其中仅带有at- 关键字,后跟大括号!)。属性/值对的要求由的语法决定@supports,您可以在spec中找到它。
只需测试一个已知的属性/值对,即可确保无论@supports实现与否,该属性/值对都能在所有用户代理中正常工作。这种(某种)消除了您会遇到实现@supports但不实现属性/值组合的用户代理的可能性,@supports而只关注其支持。
您给出的示例display: block就足够了。您使用级联的检查,如果浏览器 不 实现@supports由内覆盖声明@supports为浏览器规则 不 支持它也是可以接受的(是唯一明显的方法也无妨)。