详解CSS中@supports的用法

其实旅行最大的好处,不是能见到多少人,见过多美的风景,而是走着走着,在一个际遇下,突然重新认识了自己。

基于浏览器的特性检测大家应该已经很熟悉了,特别是modernizr.js推出来之后。其实w3c也出了规范,可以基于css来做一些特性检测,也就是@supports,这个特性已经有两年多了,之前浏览器支持度不够,现在webkit nightly也开始支持了,也就是说safari 9会支持到,这样的话,Blink+webKit+gecko都支持了,只剩下IE浏览器不支持了,嗯,这样更方便对IE差异化处理了。

但是@supports并不能完全替代JS的特性检测方法,它只支持对CSS属性的检测,其它HTML5 api以及webP等技术的检测还是需要JS来完成。
用法:

@supports就像media query一样简单:

CSS Code复制内容到剪贴板
  1. @supports(prop:value){/*morestyles*/}

@supports也允许你用各种复杂的组合来进行特性检测。
基本用法:

CSS Code复制内容到剪贴板
  1. @supports(display:flex){div{display:flex;}}

你可以用这种方法来检测各种基本的CSS属性。
not关键词

就像这样:

CSS Code复制内容到剪贴板
  1. @supportsnot(display:flex){div{float:left;}/*alternativestyles*/}

个人感觉有些鸡肋了,支持@supports的浏览器会不支持各种CSS属性么?不过万事没有绝对,这种情况以后还是可能会有。嗯,私有前缀的话可以试试。
多条件检测

CSS Code复制内容到剪贴板
  1. @supports(display:-webkit-flex)or(display:-moz-flex)or(display:flex){/*usestyleshere*/}
  2. /*and*/@supports(display:flex)and(-webkit-appearance:caret){/*somethingcrazyhere*/}

你也可以将or和and语句放在一起混用。

CSS Code复制内容到剪贴板
  1. @supports((display:-webkit-flex)or(display:-moz-flex)or(display:flex))and(-webkit-appearance:caret){/*usestyleshere*/}

或者更复杂的:

CSS Code复制内容到剪贴板
  1. @supports(not((text-align-last:justify)or(-moz-text-align-last:justify)){…/*specificCSSappliedtosimulatetext-align-last:justify*/}

JS方法

同时也可以用javascript来做类似的检测,方法也很简单:

CSS Code复制内容到剪贴板
  1. boolValue=CSS.supports(propertyName,value);boolValue=CSS.supports(supportCondition);

两种方法都可以,会返回一个bool值。比如:

CSS Code复制内容到剪贴板
  1. result=CSS.supports("text-decoration-style","blink");
  2. result=CSS.supports("display","flex");
  3. result=CSS.supports("(transform-origin:5%5%)");
  4. result=CSS.supports("(transform-style:preserve)or(-moz-transform-style:preserve)or(-o-transform-style:preserve)or(-webkit-transform-style:preserve)");

用途

最大的用途是做css特性判断的时候,不用再在js(或者传统的js方法)了,用过modernizr.js的同学可能会印象很深刻,modernizr会在html标签上加上各种各样的class来区分,其它js方法也是类似的实现思路。现在可以直接用@supports来区分或者做浏览器差异化了。
浏览器支持

chrome 28+
opera 12.1+
firefox22+
safari 9+

到此这篇关于详解CSS中@supports的用法就介绍到这了。自得时应善待他人,由于你失意时会须要他们。更多相关详解CSS中@supports的用法内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

您可能有感兴趣的文章
css让页脚保持在底部位置的四种方案

Flex布局史上最简单使用语法教程

新的CSS 伪类函数 :is() 和 :where()示例详解

纯CSS打字动画的如何实现示例

CSS浮动引起的高度塌陷问题