使用CSS的@supports标记来检测浏览器的兼容情况

CSS @supports标记在CSS代码里跟@media查询语句的语法相似:

CSS Code复制内容到剪贴板 @supports(prop:value) {     /* 各种样式 */   }  

CSS @supports允许程序员用多种不同的方法来探测当前浏览器是否支持某项CSS样式特征。

 

基本属性检测

你可以执行对基本属性和属性值的检测:

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

这是@supports标记最基本的用法。

 

not关键字

@supports标记可以和‘not’关键字组合,用来应对不支持的情况:

CSS Code复制内容到剪贴板 @supports not (display: flex) {     div { floatleft; } /* 替换样式 */   }  

 

多检测及条件检测

CSS Code复制内容到剪贴板 /* or */   @supports (display: -webkit-flex) or              (display: -moz-flex) or              (display: flex) {           /* use styles here */   }       /* and */   @supports (display: flex) and (-webkit-appearance: caret) {        /* something crazy here */   }       /* and and or */   @supports ((display: -webkit-flex) or              (display: -moz-flex) or              (display: flex)) and (-webkit-appearance: caret) {           /* use styles here */   }  

 

Javascript CSS.supports()

在Javascript中通过使用window.CSS.supports方法来对CSS @supports进行检测,规范中提供了两个方法,一个方法可以接收两个参数boolValue = CSS.supports(propertyName, value);另一个可以接收一个字符串(A DOMString containing the condition to check),boolValue = CSS.supports(supportCondition);具体使用看下例:

JavaScript Code复制内容到剪贴板 //测试环境,Chrome:34.0.1847.131 m    var res01 = CSS.supports("text-decoration-style""blink");    //Outputs: false    console.log(res01);       var res02 = CSS.supports("display""flex");    //Outputs: true    console.log(res02);       var res03 = CSS.supports("( transform-origin: 5% 5% )");    //Outputs: false    console.log(res03);       var res04 = CSS.supports("( transform-style: preserve ) or ( -moz-transform-style: preserve ) or " +                          "( -o-transform-style: preserve ) or ( -webkit-transform-style: preserve )" );    //Outputs: false    console.log(res04);  

@supports的使用场景

大多数情况,@supports是用来支持老式浏览器,并在有可能的情况下,利用现代浏览器的新特征来提高用户体验。@supports的一个最重要的使用场景是页面布局。很多现代浏览器都提供了对flexbox网页布局的支持,在这种还有很多浏览器不支持的情况下,你的代码可以写成这样:

CSS Code复制内容到剪贴板 section {     floatleft;    }       @supports (display: -webkit-flex) or              (display: -moz-flex) or              (display: flex) {           section {          display: -webkit-flex;          display: -moz-flex;         display: flex;         floatnone;        }    }  

相信随着程序员对这种新的@supports功能的使用和体验,更多的更好的使用场景会不断的出现。

使用CSS的@supports标记来检测浏览器的兼容情况