首页 > 其他分享 >CSS中 特性查询(@supports)详解及使用

CSS中 特性查询(@supports)详解及使用

时间:2024-11-09 10:32:18浏览次数:1  
标签:flex 详解 操作符 CSS supports display 表达式

1. 简介
CSS中的 @supports 用于检测浏览器是否支持 CSS 的某个属性。其实就是条件判断,如果支持某个属性可以写一套样式,如果不支持某个属性,可以提供另外一套样式作为替补。可以放在代码的顶层,也可以嵌套在任何其他条件组规则中。

语法
@supports 规则由一组样式声明和一条支持条件构成。支持条件由一条或多条使用 逻辑与(and)、逻辑或(or)、逻辑非(not)结合的名称 - 值对(name-value pair)组成。可以使用圆括号调整操作符的优先级。
@supports(prop:value) {
/* more styles */
}
如:检查是否支持 dispaly: flex
@supports (display: flex) {
div {
display: flex;
}
}
函数语法
第二种基本支持条件是支持函数,几乎所有浏览器都支持这种语法,但函数本身仍在标准化进程中。
测试浏览器是否支持经过测试的选择器语法。如果浏览器支持子组合器,则以下示例返回 true。
@supports selector(A > B) {}
2. 操作符
not 操作符
将 not 操作符放在任何表达式之前就能否定一条表达式。
/* 如果浏览器不支持display:flex属性的话,那么div的样式就是 float: right */
@supports not (display: flex) {
div {
float: right;
}
}
和其他操作符一样,not 操作符可以应用在任意复杂度的表达式上。
@supports not (not (transform-origin: 2px)) {}
@supports (display: grid) and (not (display: inline-grid)) {}
注意: 如果 not 操作符位于表达式的最外层,则没有必要使用圆括号将它括起来。但如果要将该表达式与其他表达式连接起来使用,比如 and 和 or,则需要外面的圆括号。

and 操作符
and 操作符用来将两个原始的表达式做逻辑与后生成一个新的表达式,如果两个原始表达式的值都为真,则生成的表达式也为真。

/* 如果浏览器支持 display:flex 和 box-shadow 的属性,就执行里面自己的样式 */
@supports (display: flex) and ( box-shadow: 2px 2px 2px black ) { }

可以将多个合取词并置而不需要更多的括号。以下两者都是等效的:
@supports (display: table-cell) and (display: list-item) and (display:run-in) {}
@supports (display: table-cell) and ((display: list-item) and (display:run-in)) {}
or 操作符
or 操作符用来将两个原始的表达式做逻辑或后生成一个新的表达式,如果两个原始表达式的值有一个或者都为真,则生成的表达式也为真。
/* 如果浏览器支持其中一个,就可执行里面自己的样式 */
@supports (display: -webkit-flex) or (display: -moz-flex) or(display: flex) {
/*自己的样式 */
}
可以将多个析取词并置而不需要更多的括号。以下两者都是等效的:
@supports (transform-style: preserve) or (-moz-transform-style: preserve) or
(-o-transform-style: preserve) or (-webkit-transform-style: preserve) {}

@supports (transform-style: preserve-3d) or ((-moz-transform-style: preserve-3d) or
((-o-transform-style: preserve-3d) or (-webkit-transform-style: preserve-3d))) {}
注意: 在使用 and 和 or 操作符时,如果是为了定义多个表达式的执行顺序,则必须使用圆括号。如果不这样做的话,该条件就是无效的,会导致整个规则失效。

@Supports 使用
@supports 的用途是将一组较旧的样式设置为备份,然后取消这些样式并在支持给定属性的情况下进行增强。
@supports 的一个优秀用例是布局。一些边缘浏览器现在提供对 flexbox 的支持,而其他浏览器则落后。
.wrap{
float: right;
}

@supports (display: -webkit-flex) or (display: -moz-flex) or (display: flex) {
.wrap{
display: -webkit-flex;
display: -moz-flex;
display: flex;
float: none;
}
}
3. CSS.supports()
CSS @supports 对应的 JavaScript 是 window.CSS.supports。
CSS.supports() 静态方法返回一个Boolean 值,用来校验浏览器是否支持一个给定的 CSS 特性。

语法
boolValue = CSS.supports(propertyName, value);
boolValue = CSS.supports(supportCondition);
参数
第一种用来检验浏览器对于一对“属性 - 属性值”的支持:
propertyName 要检查的 CSS 属性名称
value 要检查的 CSS 属性值
第二种语法需要一个匹配@supports条件的参数:
supportCondition 检查条件
const supportsFlex = CSS.supports('display', 'flex');
const flexAndAppearance = CSS.supports('(display: flex) and (-webkit-appearance: caret)')
eg
const supportsFlex = CSS.supports('display', 'flex');
const flexAndAppearance = CSS.supports('(display: flex) and (-webkit-appearance: caret)')
在使用 supports 的 JavaScript 方法之前,首先检测功能是很重要的。Opera 使用了一个不同的方法名,因此会抛出一些东西:
const supportsCSS = !!((window.CSS && window.CSS.supports) || window.supportsCSS || false)

https://www.octfgroup.com/

标签:flex,详解,操作符,CSS,supports,display,表达式
From: https://www.cnblogs.com/sathcal/p/18536403

相关文章

  • RT DETR v2 TensorRT C++ 部署详解
    RT-DETRv2TensorRTC++部署详解概述随着深度学习技术的发展,目标检测算法在各种应用场景下展现出了卓越的表现。RT-DETRv2(Real-TimeDetectionTransformerv2)作为一款高效的实时目标检测模型,其结合了Transformer架构的优势与传统卷积神经网络(CNNs)的速度,为开发者提供了在......
  • HarmonyOs DevEco Studio小技巧28--部分鸿蒙生命周期详解
    目录前言 页面和自定义组件生命周期页面生命周期onPageShow--- 表示页面已经显示 onPageHide--- 表示页面已经隐藏onBackPress--- 表示用户点击了返回键组件生命周期aboutToAppear---表示组件即将出现onDidBuild--- 表示组件已经构建完成aboutToDisappe......
  • 华为市场ASO详解
    今天我们要讲的是安卓市场华为应用市场新包从0-1如何从应用市场获量,首先我们要先知道的一个市场大环境,不管是从流量,还是付费来看,华为在安卓市场中是为首的。华为目前的市场状态是有点混乱的,马甲包满天飞,同名应用权重非常高,但混乱就有机会,这个市场也是可操作性最强的一个安卓市......
  • 深入解析 Transformers 框架(四):Qwen2.5/GPT 分词流程与 BPE 分词算法技术细节详解
    前面我们已经通过三篇文章,详细介绍了Qwen2.5大语言模型在Transformers框架中的技术细节,包括包和对象加载、模型初始化和分词器技术细节:深入解析Transformers框架(一):包和对象加载中的设计巧思与实用技巧深入解析Transformers框架(二):AutoModel初始化及Qwen2.5模型加载全......
  • Python面向对象1详解案例
    1.面向对象(先前pygame的小游戏后续1中有介绍)类名:大驼峰命名方式(每个单词的首写字母都有要大写)属性:就是变量行为:函数class类名:   类代码(属性,行为)运行代码类代码直接会执行对象:类产生对象(类()来实现)#对象使用类里面的方法对象.方法名()#对象使......
  • 编程之路,从0开始:操作符详解
    Hello大家好!我们又见面啦!给生活添点passion,开启今天的编程之路!目录1、算术操作符2、移位操作符3、位操作符(1)按位与(2)按位或(3)按位异或(4)按位取反4、单目操作符(1)!操作符(2)szieof(3)(类型)5、逗号表达式7、关系操作符8、逻辑操作符9、?:操作符10、下标访问[],函数调用()11......
  • CSS高级技巧
    一、精灵图1、为什么需要精灵图1)为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,出现了CSS精灵技术(也称CSSSprites、CSS雪碧)。2)核心原理:将网页中的一些小背景图像整合到一张大图中,这样服务器只需要一次请求就可以了。2、精灵图的使用1)精灵图主......
  • 详解:字符串常量池
            字符串常量池是Java运行时环境(JRE)的一部分,它用于存储字符串字面量。字符串字面量是源代码中直接用双引号括起来的字符串,例如"hello"。在Java中,字符串是不可变的,这意味着一旦创建了一个字符串对象,它的值就不能改变。        当Java编译器遇到字符串字......
  • Oracle OCP认证考试考点详解082系列15
    题记:本系列主要讲解OracleOCP认证考试考点(题目),适用于19C/21C,跟着学OCP考试必过。71.第71题:题目解析及答案:对于数据库,使用数据库配置助手(DBCA)可以执行以下哪两项任务?A.为新数据库配置非标准块大小。数据库配置助手(DBCA)可用于为新创建的数据库配置非标准块大小。在......
  • 深度学习:循环神经网络(RNN)详解
    循环神经网络(RNN)详解**循环神经网络(RecurrentNeuralNetwork,RNN)**是一类能够处理序列数据的神经网络,其设计使得网络可以在每个时间步上保留先前时间步的信息。RNN通过在时间步之间共享参数,能够建模输入序列中元素的时序依赖关系。由于其递归结构,RNN在自然语言处理、语音......