CSS3条件判断语句CSS @supports用法

用JavaScript在客户端检测浏览器是否支持某项功能特征,目前虽然这是最可行的方法,但不好的是,对于同一个特征的检测,我们需要反复多次用相同的函数附带各种浏览器前缀。而且因为CSS没有相应的功能,使用JavaScript会导致页面闪现,多余辅助代码等问题。火狐浏览器,谷歌浏览器和Opera浏览器最近刚刚添加了一项新的功能——在CSS里支持@supports标记、在JavaScript里支持CSS.supports函数,用来检测浏览器是否支持某个期望的样式功能。下面让我们来看看是如何使用的!

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

 

 代码如下 复制代码
@supports(prop:value) {
 /* 各种样式 */
}

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

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

 代码如下 复制代码
@supports (display: flex) {
 div { display: flex; }
}

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

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

 代码如下 复制代码
@supports not (display: flex) {
 div { float: left; } /* 替换样式 */
}

组合条件检测
对多个CSS属性的检查可以通过‘or’和‘and’串联起来:

 代码如下 复制代码
/* 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 */
}

@supports标记使用的逻辑判断结构跟@media是一样的。

JavaScript CSS.supports
跟CSS的@supports标记相对应的,JavaScript里提供了window.CSS.supports方法。CSS.supports的接口规范提供两种调用方法。第一种方法是使用两个参数:一个是属性名,另一个是属性值:

 代码如下 复制代码
var supportsFlex = CSS.supports("display", "flex");

第二种用法是简单的提供整个需要分析的样式字串:

 代码如下 复制代码
var supportsFlexAndAppearance = CSS.supports("(display: flex) and (-webkit-appearance: caret)");

这两个方法给我们提供了极大的方法,避免了我们拼凑代码或设临时变量来检查浏览器的支持。

在JavaScript里使用supports方法前,你一定要先检查浏览器是否支持这种功能。Opera浏览器使用了一种完全不同的名称,这导致我们的代码有点拖拉:

 代码如下 复制代码
var supportsCSS = !!((window.CSS && window.CSS.supports) || window.supportsCSS || false);

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

 代码如下 复制代码
section {
 float: left;
}
 
@supports (display: -webkit-flex) or
          (display: -moz-flex) or
          (display: flex) {
 
    section {
      display: -webkit-flex;
      display: -moz-flex;
     display: flex;
     float: none;
    }
}

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

使用@supports
如果你对像@support这样的新功能感兴趣,想试验一下,你需要安装最新版的现代浏览器,比如 Canary, Firefox Nightly或 Opera Next。Opera 12.1, WebKit Nightly,和 Firefox Nightly都支持@supports。对于之前的火狐浏览器,你需要开启[layout.CSS.supports-rule.enabled]设置,这样这些新特征才会生效。

@supports是CSS和JavaScript规范中非常有用的补充。对浏览器新功能的检查已经是我们编程中非常常见的必要工作。@supports给我们提供了更底层的支持,而之前多少年我们都是用自定义方法实现。我估计,接下来的几年里,随着flexbox布局的普遍流行,我们将会看到对@support标记更加广泛的使用

时间: 2024-10-29 17:55:54

CSS3条件判断语句CSS @supports用法的相关文章

CSS3条件判断:@supports条件判断规则

文章简介:众所周知,不同的浏览器(不管是现代浏览器还是老版本的IE浏览器)对Web页面的解析都是不一样,为了让Web页面在这些浏览器下渲染达到基本一致的情况,给用户更好的体验,我们必须为他们写不同的样式代码. CSS3条件判断,听起来"不明觉厉",如果你对CSS稍为熟悉一点的话,你会发现CSS中的"@media"就是条件判断之一.是的,在CSS3的条件判断规范文档中包含了两个部分,其一是"@media"规则,主要用来"根据媒体属性区分样

JavaScript中的条件判断语句使用详解

这篇文章主要介绍了JavaScript中的条件判断语句使用详解,是JS入门学习中的基础知识,需要的朋友可以参考下 在写一个程序,可能有一种情况,当你需要采用一个路径出给定两个路径.所以,需要使用条件语句,让程序来做出正确的决策和执行正确的行动. JavaScript支持其用于执行根据不同的条件不同的操作条件语句.在这里,我们将解释if..else语句. JavaScript支持if..else语句的形式如下: if 语句 if...else 语句 if...else if... 语句. if 语

详解Python中的条件判断语句

  这篇文章主要介绍了Python中的条件判断语句,是Python入门中的基础知识,需要的朋友可以参考下 一个else语句可以使用if语句结合起来.如果在if语句中的条件表达式解析为0或false值,那么else语句包含代码执行. else语句是可选的声明,并if语句下面最多只有一个else语句. 语法: if ... else语句的语法是: ? 1 2 3 4 if expression: statement(s) else: statement(s) 例子: ? 1 2 3 4 5 6 7

解读Ruby当中的条件判断语句

  这篇文章主要介绍了详细解读Ruby当中的条件判断语句,if.else等逻辑判断语句是各门编程语言的基础,需要的朋友可以参考下 Ruby的提供有条件结构,常见在现代编程语言中.在这里,我们将解释Ruby所有条件语句和修饰符 Ruby if...else 语句: 语法: ? 1 2 3 4 5 6 7 if conditional [then] code... [elsif conditional [then] code...]... [else code...] end if 表达式用于条件执

vb net-VB.NET2010:删除单元格数据时条件判断语句报错

问题描述 VB.NET2010:删除单元格数据时条件判断语句报错 VB.NET2010表格DataGridView2_CellValidating事件中 If e.RowIndex >= 0 And IIf(IsDBNull(DataGridView2.CurrentCell.Value)" DataGridView2.CurrentCell.Value) <> e.FormattedValue Then... 当我删除当前单元格内容时,如果针对字符型字段OK,但是针对数值型字

JavaScript中的条件判断语句使用详解_基础知识

 在写一个程序,可能有一种情况,当你需要采用一个路径出给定两个路径.所以,需要使用条件语句,让程序来做出正确的决策和执行正确的行动. JavaScript支持其用于执行根据不同的条件不同的操作条件语句.在这里,我们将解释if..else语句. JavaScript支持if..else语句的形式如下:     if 语句     if...else 语句     if...else if... 语句. if 语句: if语句是基本的控制语句,它允许JavaScript来作出决定,有条件地执行语句.

详解C++编程中的条件判断语句if-else与switch的用法_C 语言

if-else 语句控制条件分支. 语法 if ( expression ) statement1 [else statement2] 备注 如果 expression 的值不为零,执行 statement1 .如果选项 else 存在,如果 expression 的值为零,执行 statement2. 表达式必须是算术或指针类型,或者必须是定义明确的整型或指针类型转换的类类型.有关转换器的信息,请参见标准转换. 在两个形式的 if 语句和 expression 语句中计算,可以具有除结构以外的

PHP入门教程之If…Else 条件判断语句

 if.elseif 以及 else 语句用于执行基于不同条件的不同动作. 条件语句 当您编写代码时,您常常需要为不同的判断执行不同的动作. 您可以在代码中使用条件语句来完成此任务. if-else 语句 在条件成立时执行一块代码,条件不成立时执行另一块代码 elseif 语句 与 if-else 配合使用,在若干条件之一成立时执行一个代码块 If-Else 语句 如果您希望在某个条件成立时执行一些代码,在条件不成立时执行另一些代码,请使用 if-.else 语句. 语法 if (conditi

PHP的switch判断语句的“高级”用法详解_php实例

只所以称为"高级"用法,是因为我连switch的最基础的用法都还没有掌握,so,接下来讲的其实还是它的基础用法! switch 语句和具有同样表达式的一系列的 IF 语句相似.很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码.这正是 switch 语句的用途. 注意: 注意和其它语言不同,continue 语句作用到 switch 上的作用类似于 break.如果在循环中有一个 switch 并希望 continue 到外层循环中的下一个轮回