详解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复制内容到剪贴板

  @supports(prop:value) { /* more styles */ }

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

  基本用法:

  CSS Code复制内容到剪贴板

  @supports (display: flex) { div { display: flex; } }

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

  not关键词

  就像这样:

  CSS Code复制内容到剪贴板

  @supports not (display: flex) { div { float: left; } /* alternative styles */ }

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

  多条件检测

  CSS Code复制内容到剪贴板

  @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 */ }

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

  CSS Code复制内容到剪贴板

  @supports ((display: -webkit-flex) or (display: -moz-flex) or (display: flex)) and (-webkit-appearance: caret) { /* use styles here */ }

  或者更复杂的:

  CSS Code复制内容到剪贴板

  @supports ( not ((text-align-last:justify) or (-moz-text-align-last:justify) ){ … /* specific CSS applied to simulate text-align-last:justify */ }

  JS方法

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

  CSS Code复制内容到剪贴板

  boolValue = CSS.supports(propertyName, value); boolValue = CSS.supports(supportCondition);

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

  CSS Code复制内容到剪贴板

  result = CSS.supports("text-decoration-style", "blink");

  result = CSS.supports("display", "flex");

  result = CSS.supports("( transform-origin: 5% 5% )");

  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+

时间: 2024-05-11 06:54:04

详解CSS中@supports的用法的相关文章

详解Java中final的用法_java

概念 final 具有"不可改变的"的含义,可以修饰 非抽象类.非抽象成员方法和变量. 用 final 修饰的类不能被继承,没有子类. 用 final 修饰的方法不能被子类的方法覆盖(重写). 用 final 修饰的变量表示常量,只能被赋一次值(声明变量的时候). 注: final 不能用来修饰构造方法,因为"方法覆盖"这一概念仅适用于类的成员方法,而不适用于类的构造方法,父类的构造方法和子类的构造方法之间不存在覆盖的关系,因此用final修饰构造方法没有任何意义.

详解MySQL中UNION的用法_Mysql

如果想选择其他几个表中的行或从一个单一的表作为一个单独的结果集行的几个集会,那么可以使用的UNION. UNION在MySQL4.0以上版本才能可以使用.本节说明如何使用它. 假设有两个表,潜在和实际的客户列表,供应商购买耗材合并所有三个表中的姓名和地址,来创建一个单一的邮件列表.UNION提供了一种方法做到这一点.假设三个表有以下内容: mysql> SELECT * FROM prospect; +---------+-------+------------------------+ | f

举例详解CSS中的字体尺寸设置

  常用单位 在CSS中可以用很多不同的方式来设定字体的尺寸.一般来说,这些单位被分成两大类:绝对单位(absolute)和相对单位(relative). 绝对单位在大多数情况下是相对于某些实际量度而言的固定值,即是说它们一旦设定,就不会因为其他元素的字体尺寸变化而变化. 相对单位没有一个固定的度量值,而是由父元素尺寸来决定的相对值,它们的尺寸会根据与其相关的元素改变而改变. 下面是对这些单位的一个简单整理: 这里主要关注这几个单位:px.pt.%.em.rem和vw. 它们之间有什么区别? 从

详解CSS中clear:left/right的用法

一.理解clear: left/clear: right 当想到clear: left的时候,自然会认为是"清除左浮动",clear: right是清除右浮动. 其实现在想想,这样的理解与表示是不严谨的欠考虑的. 一般,现在中文圈流传的表述是: clear语法: clear : none | left | right | both 取值: none : 默认值.允许两边都可以有浮动对象 left : 不允许左边有浮动对象 right : 不允许右边有浮动对象 both : 不允许有浮动

举例详解CSS中position属性的使用

  position 这个属性决定了元素将如何定位.它的值大概有以下五种: 每个网页都可以看成是由一层一层页面堆叠起来的,如下图所示. position 设置为 relative 的时候,元素依然在普通流中,位置是正常位置,你可以通过 left right 等移动元素.会影响其他元素的位置. 而当一个元素的 position 值为 absolute 或 fixed 的时候,会发生三件事: 把该元素往 Z 轴方向移了一层,元素脱离了普通流,所以不再占据原来那层的空间,还会覆盖下层的元素. 该元素将

详解CSS中的Box Model盒属性的使用

  页面上显示的每个元素(包括内联元素)都可以看作一个盒子,即盒模型( box model ).请看 Chrome DevTools 里的截图: 可以显而易见的看出盒模型由 4 部分组成.从内到外分别是: content -> padding -> border -> margin 按理来说一个元素的宽度(高度以此类推)应该这样计算: 总宽度 = margin-left + border-left + padding-left + width + padding-right + bord

详解CSS中视窗单位和百分比单位的使用

  视窗(Viewport)单位 视窗(Viewport)单位是相对单位,意味着它们没有客观的尺寸.它们的大小是由视窗(Viewport)大小决定的.下面是四个与视窗(Viewport)有关的单位. 我将集中讨论前两个单位,因为它们更可能被使用. 在很多情况下,视口单位(vh和vw)和百分比单位在它们可以实现的功能方面是重叠的.然而,它们每个都有其明显的优点和缺点.概括的说: 当处理宽度的时候,%单位更合适.处理高度的时候,vh单位更好. 占满宽度的元素: % > vw 正如我所提到的,vw单位

详解CSS中的规则声明

  CSS 规则由 选择器 和 声明 两部分组成,本文将要说的是第二部分:声明. 一个声明包含两部分:属性 和 值. 属性 指出要影响元素的哪个方面(颜色.高度,等等),而 值 表示属性设定为什么(绿色.15px,等等). CSS属性值主要分以下三类: 文本值 数字值 颜色值 1.文本值 文本值也叫关键字.所有 CSS 属性都有文本值. 例如,border-style 属性有 solid.dashed 以及 insert 值. 2.数字值 数字值后面都有一个单位,例如英寸或点.在声明 font-

举例详解CSS中的的优先级

  计算优先级 优先级是根据由每种选择器类型构成的级联字串计算而成的.他是一个对应匹配表达式的权重. 如果优先级相同,靠后的 CSS 会应用到元素上. 注意:元素在文档树中的位置是不会影响优先级的 优先级顺序 优先级逐级增加的选择器列表: 通用选择器(*) 元素(类型)选择器 类选择器 属性选择器 伪类 ID 选择器 内联样式 基于类型的优先级 优先级是根据选择器类型进行计算的. 在下面的例子中,属性选择器尽管选择了一个ID但是在优先级计算法则中还是根据其类型计算. 有如下样式声明: CSS C