CSS中@support实现渐进式网页设计实例代码

所属分类: 网页制作 / CSS 阅读数: 1194
收藏 0 赞 0 分享

前言

特性查询赋予了我们使用CSS检测浏览器是否支持某个css特性的能力。我们可以使用该功能在浏览器支持最新的CSS特性时,使用新的语法来编写我们的样式,同时对于不支持的浏览器进行优雅降级。

CSS的设计本身就是支持优雅降级的。对于浏览器不支持的CSS语法,在浏览器解析时会被忽略。因此,我们只要在编写样式时先满足低版本浏览器的视觉完整性,再针对支持高级特性的浏览器进行渐进式样式设计即可。但有时候这并不能满足我们的需求:当我们需要一系列的样式组合来实现我们的视觉效果时,如果浏览器对我们使用的一系列样式中的某一个CSS特性不支持,有可能出现样式错乱的情况。

基本使用

@support的基本语法与@media十分相似

.selector {
/* property supported in old browsers  */
}
@support (property: value) {
/* property supported in new browsers */
}

特性查询语句由@support关键字开头,加上一个条件语句和包含在一个大括号内的CSS规则组成。我们可以现在特性查询语句外写旧浏览器支持的样式,然后再在特性查询语句中写浏览器支持某些新特性时的新样式。

div {
  display: flex;
}
@support (display: grid) {
  div {
    display: grid;
  }
}

在该示例中,我们先用flex布局实现旧浏览器支持的布局样式,然后更进一步我们可以在支持display: grid;属性的新浏览器中使用grid布局快乐的玩耍了。

条件语句中的组合条件检测

在特性查询语句的支持条件中我们有时候可能需要同时查询浏览器对多个CSS属性的支持情况来觉得如何组织我们的渐进式样式。这种时候我们可以用and、or、not这三种布尔操作来组合我们的查询条件。

布尔操作符

and操作符可以对两个表达式的结果进行逻辑与操作,即只有当两个表达式都为真的时候,则生成的表达式也为真,否则为假。多个逻辑与表达式可以直接并列成一排,表示所有表达式都为真的时候,整体的求值才为真。

@support (display: table-cell) and (display: list-item) and (display:run-in) {
/* some style here */
}

or操作符可以对两个表达式的结果进行逻辑或操作,即只要两个表达式有一个为真的时候,则生成的表达式也为真,否则为假。多个逻辑或表达式也可以直接并列成一排,表示所有表达式只有有一项为真的时候,整体的求值就为真。

@support (-webkit-mask-image: -webkit-linear-gradient(right,transparent,#000)) or (mask-image: linear-gradient(-90deg,transparent,#000)) {
  /* some style here */
}

not操作符一般放在表达式的前面表示对原表达式的否定,即求值为真的表达式加上not操作符后表示假,求值为假的表达式加上not后表示真。

@support not (display: flex) {
  div {
    float: left;
  }
}

组合条件检测

布尔操作符也可以组合起来使用,但必须用括号来显示的隔离不用的布尔操作符,以避免优先级造成的混乱

@support (display: flexbox) and ( not (display: inline-grid) ) {
/* some style here */
}

CSS.supports

在JavaScript中有一个与特性查询语句相对应的API,window.CSS.supports。这个方法接受一个与CSS特性查询语句的查询条件类似的字符串作为参数,或者接受两个参数,一个代表属性名,一个代表属性值。

CSS.support('(display: flex) and(not(display: line-grid)');
CSS.support('display', 'grid');

这个API可以和CSS的特性查询配合使用,当我们的浏览器支持某些更高级特性的时候,设计一些渐进式功能。

兼容性

每个CSS特性使用最后都离不开谈兼容性。特性查询是在2011年就已经发布的草案,多年来支持程度已经比较可观了,除了IE系列全军覆没之外,其他主流浏览器都能够很好的支持。

参考

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。

更多精彩内容其他人还在看

利用纯CSS3实现动态的自行车特效源码

这篇文章主要介绍了如何利用纯CSS3实现动态的自行车的方法,文中给出了完整的实例代码,实现后的效果非常不错,大家可以直接运行看看效果,需要的朋友下面来一起学习学习吧。
收藏 0 赞 0 分享

web前端开发规范文档(2014年版本)

这篇文章主要为大家介绍了前端开发团队遵循和约定的代码书写规范,意在提高代码的规范性和可维护性,需要的朋友可以参考下
收藏 0 赞 0 分享

前端编码规范(4)—— CSS 和 Sass (SCSS) 开发规范

这篇文章主要介绍了前端编码规范(4)—— CSS 和 Sass (SCSS) 开发规范,需要的朋友可以参考下
收藏 0 赞 0 分享

手把手教你用CSS实现带箭头的流程进度条

这篇文章主要给大家介绍了利用CSS实现带箭头的流程进度条大方法,文中给出了详细的示例代码,对大家具有一定的参考价值,有需要的朋友们一起来看看吧。
收藏 0 赞 0 分享

CSS实现三栏布局的四种方法示例

可能有人不理解三栏布局是什么,其实三栏布局页面分为左中右三部分,然后对中间一部分做自适应的一种布局方式,下面这篇文章就给大家详细介绍了CSS实现三栏布局的四种方法,需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

利用css实现浮雕效果示例代码

这篇文章主要给大家介绍了利用css如何实现浮雕的效果,文中给出了详细的示例代码和解释,相信对大家有一定的参考价值,感兴趣的朋友们下面来一起看看吧。
收藏 0 赞 0 分享

浏览器默认样式(User Agent Stylesheet)的介绍与最佳处理方法

这篇文章主要给大家介绍了浏览器默认样式(User Agent Stylesheet)的相关资料,并给出了相对应的最佳解决方法。有需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

css中px、em和rem的区别总结

相信每位前端工程师们都有这么一个体会,国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?下面这篇文章小编就来给大家详细介绍关于css中px、em和rem的区别,需要的朋友可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

CSS3实现点击放大的动画实例代码

这篇文章主要给大家介绍了关于利用CSS3实现点击放大的动画效果,文中给出了完整的实例代码,相信对大家具有一定的参考价值,需要的朋友们可以一起来看看吧。
收藏 0 赞 0 分享

利用css代码实现纸飞机效果实例源码

这篇文章主要给大家介绍了如何利用css代码实现纸飞机的效果,实现后效果非常不错,文中给出了详细的实例代码,大家可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享
查看更多