CSS Feature Queries (CSS特性查询)

Feature Queries 是CSS3 Conditional Rules specification中 的一部分,它支持“@supports”规则,“@supports”规则可以用来测试浏览器是否支持CSS属性和值对。CSS本身有降级机制,比如忽视 不支持的属性或值,但当很重要的属性直接被忽视也是很严重的,这个时候你可以用Feature Queries 测试是否支持所有的CSS规则,还可以优化你的页面。Queries在各个浏览器中已经有很多稳定的实现了,比如Chrome,Firefox和 Opera。对浏览器的支持仍在加强,你有必要了解一下Featue Queries, 并决定是否在现在的项目中合适它。

Feature Queries in CSS

Feature Queries和Media Queries有点像,举一个简单的例子,你可以要求浏览器运行一个CSS的margin属性。

@supports (margin: 0) { /CSS to apply/ }
如果你不太明白,让我们举一个现实中的例子,假如你想用backgrund-blend-mode来给背景图片着色,可以在原有的灰度图片中添加一个颜色。

在线调试唯一地址:http://www.gbtags.com/gb/debug/76f8c728-796d-48c7-a82f-f8400e8ba2a0.htm
body {
    background-blend-mode: multiply;
    background: linear-gradient(rgb(59, 89, 106)
    , rgb(63, 154, 130))
    , url(background.png);
    }

这个功能很酷不是么?然而,浏览器对它的支持还在完善之 中, background-blend-mode 目前已经可以在很多浏览器中使用了, 但是仍有一些无法显示出想要的效果。 为了在无法显示效果的浏览器中同样完成这个功能,我们可以通过类似半透明颜色叠加的方式。

body {
    background: #3F9A82;
    background: linear-gradient(rgba(59, 89, 106, 0.8)
    , rgba(63, 154, 130, 0.8))
    , url(background.png);
    }

上面的代码中,如果浏览器不支持semi-transparent颜色 图层,那就只能显示一种背景。如果我们使用Feature Query,我们可以根据情况来改变背景。Feature Query这里就更像Media Query了,,使用@supports并在括号内添加CSS声明即可使用。

@supports (background-blend-mode: multiply) {
    body {
    background-blend-mode: multiply;
    background: linear-gradient(rgb(59, 89, 106)
    , rgb(63, 154, 130))
    , url(background.png);
    }
    }

Feature Queries in JavaScript
Feature Queries同时也支持JavaScript接口:CSS.supports。我们同样以上面的例子来说明。如果浏览器支持background-blend-mode: multiply,我们可以在body标签中添加 blend-mode。

在线调试唯一地址:http://www.gbtags.com/gb/debug/beef5e87-2159-45e9-872a-c85b51046e29.htm

    window.onload = function() { if (CSS.supports('(background-blend-mode: multiply)'))
    document.body.classList.add('blend-mode');
    }

    body.blend-mode {
    background-blend-mode: multiply;
    background: linear-gradient(rgb(59, 89, 106)
    , rgb(63, 154, 130))
    , url(background.png);
    }

像上面的演示一样,你可以用逻辑运算符(and, or 和 not)来合并测试。举例来说,如果你想要让浏览器同时支持background-blend-mode 和background属性值,你可以编辑下面的内容:

@supports (background-blend-mode: multiply)
    and (background: linear-gradient(...), url(...))

或者写成:

CSS.supports('(background-blend-mode: multiply) \
    and (background: linear-gradient(...), url(...))');

相 信Feature Queries很快就会在开发者之间广泛流行起来,你需要考虑的就是在什么时候使用它,在测试的时候需要确定它们能在同一个浏览器中适用。虽然 Feature Query对性能方面不会有太大的改善,但是它们可以让你的代码变得更加可控。不妨先试一试这些新特性,然后把感受告诉我们。
文章转载自 开源中国社区 [http://www.oschina.net]

时间: 2024-09-18 22:31:08

CSS Feature Queries (CSS特性查询)的相关文章

学习CSS教程:学习CSS网页布局

文章简介:你也许知道什么叫选择器,什么叫属性,什么叫数值,也许你对css布局略懂一二,但这还远远不够.如果你想着从头开始学习HTML和CSS的话,我建议你认真查看下 this tutorial. 否则,在工作的时候,你依然陷入迷惘的泥潭中苦苦挣扎. 这个篇文章介绍的是现在广泛使用于网站布局领域的CSS基础. 你也许知道什么叫选择器,什么叫属性,什么叫数值,也许你对css布局略懂一二,但这还远远不够.如果你想着从头开始学习HTML和CSS的话,我建议你认真查看下 this tutorial. 否则

谈谈一些有趣的CSS题目(十四)-- 纯 CSS 方式实现 CSS 动画的暂停与播放!

开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题中有你感觉到生僻的 CSS 属性,赶紧去补习一下吧. 不断更新,不断更新,不断更新,重要的事情说三遍. 谈谈一些有趣的CSS题目(一)-- 左边竖条的实现方法 谈谈一些有趣的CSS题目(二)-- 从条纹边框的实现谈盒子模型 谈谈一些有趣的CSS题目(三)-- 层叠顺序与堆栈上下文知多少 谈谈一些有趣

引人瞩目的 CSS 变量(CSS Variable)

这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变量. 一直以来我们都知道,CSS 中是没有变量而言的,要使用 CSS 变量,只能借助 SASS 或者 LESS 这类预编译器. 但是新的草案发布之后,直接在 CSS 中定义和使用变量已经不再是幻想了,像下面这样,看个简单的例子: // 声明一个变量: :root{ --bgColor:#000; }

网页设计CSS网页布局:CSS网页布局的未来

文章简介:大家都知道,css有着奇妙的特性,然而让人失望的是,css对基本页面布局上的支持有所欠缺.但是这种情况正在得到改变,更多的动态页面正是由css所支持的,正如peter gasston所说的. 在这里,我能够保证在数年之后,css3必定能够引领潮流.一揽子的前端工具正在应运而生,方便为我们带来rounded corners圆角,gradients渐变,opacity透明度,transformations,transitions,animations,甚至更多效果.但是现在我们都有了fun

CSS网页制作:CSS的面试题和练习

文章简介:如果你处在一个需要面试别人有关于CSS方面技巧和知识,一时想起来还真有点难.我把我能想出来的整理在一起,提供给大家参考. 如果你处在一个需要面试别人有关于CSS方面技巧和知识,一时想起来还真有点难.我把我能想出来的整理在一起,提供给大家参考. 练习要做 正如他们说的,大家实际工作很重要.当然,大家通过工作练习更为重要.这些都是一些练习,并不特别困难,任何人或有没有CSS经验都应该做得到.只看或只听,这样做是没有任何意义的.在CodePen中做练习就挺完美的.   CodePen如何使用

不同CSS技术及其CSS性能之间的差异

 一.为什么我要测试CSS的性能    这是背景:   我是OOCSS(译者注:面向对象CSS)的忠实粉丝.但是最近工作,我一直使用Compass,SASS(译者注:SASS使CSS函数化,有诸如变量,嵌套,混合,继承等特性,需Ruby支持).我有时候感觉到OOCSS和SASS似乎有点古怪.我的一个朋友把我介绍给了Chris Eppstein(Compass的创建者),我们就SASS中的@extend方法进行了探讨.所以我决定创建一个CSS测试页面,用一种很原生态的方式来显示是否SASS的@ex

纯CSS方式实现CSS动画的暂停与播放!

使用纯 CSS 的方法,能否暂停.播放 CSS 动画?看起来不可能,至少很麻烦. 我们知道,在 CSS3 animation 中,有这样一个属性可以暂停.播放动画: {        animation-play-state: paused | running;    }  animation-play-state: 属性定义一个动画是否运行或者暂停.可以通过查询它来确定动画是否正在运行.另外,它的值可以被设置为暂停和恢复的动画的重放. 如果借助 Javascript,我们可以实现控制 CSS

CSS高级教程: CSS框架

文章简介:可以从CSS框架中借鉴到什么. 现在很多人会使用 CSS 框架进行快速建站.那 CSS 框架是什么呢,它通常是一些 CSS 文件的集合,这些文件包括基本布局.表单样式.网格.简单组件.以及样式重置.使用 CSS 框架大大降低工作成本进行快速建站.当然对于一些大型的项目,可能会很难照搬某些框架直接使用的,因为直接使用会带来一些限制或者冗余的问题.但在 CSS 框架已经日趋成熟的今天,在我们设计项目架构.规范的时候,现时市面上一些优秀的框架也可以给我们提供很多可借鉴的地方. 本文主要从几个

CssGaga教程:css合并与CSS优化

文章简介:CssGaga – css合并和CSS优化 CssGaga – css合并 勾选合并开启此功能Before: @import url("reset.import.source.css"); @import url("grid.import.source.css"); @import url("mod-1.source.css"); /* mod-1.source.css 中 @import url("media.source.