学透CSS-@support 判断兼容性

举报
搞前端的半夏 发表于 2021/10/24 20:33:12 2021/10/24
【摘要】 前言@support并属于比较新的CSS3属性了,几年前,@support刚出现的时候,大家其实对这个属性并没有啥感觉,因为那个时候CSS3在浏览器上的兼容性不是太好,并且有的浏览器也不兼容@support属性了,但是现在我觉得大家真的可以用起来了! @support允许我们在应用样式块之前,测试浏览器是否支持特定的属性:值组合;这个就有点类似@media,当浏览器的宽度介于每个区间,匹配...

前言

@support并属于比较新的CSS3属性了,几年前,@support刚出现的时候,大家其实对这个属性并没有啥感觉,因为那个时候CSS3在浏览器上的兼容性不是太好,并且有的浏览器也不兼容@support属性了,但是现在我觉得大家真的可以用起来了!

@support

允许我们在应用样式块之前,测试浏览器是否支持特定的属性:值组合;这个就有点类似@media,当浏览器的宽度介于每个区间,匹配的CSS生效。比如@media当浏览器窗口的宽度小于某个指定大小时查询如何匹配然后里面的CSS生效。

语法

@supports (属性: 属性值) {
想要生效的样式
}

例如下面这个例子:先判断时候支持grid,支持的话设置div的布局为grid.

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

逻辑运算

not:

@supports not (display: grid) {

}

and:


@supports (display: grid) and (-webkit-display:grid) {

}

or:

@supports (display:grid) or (-webkit-display:grid ) {

}

混合:

@supports ((display:grid) or
          (-webkit-display:grid) ) and (display:-webkit-grid) {

}

JS支持

判断存不存CSS

if (window.CSS && window.CSS.supports) {

}

可以属性和值分开

let supportsGrid = CSS.supports("display", "grid");

也可以不分开

let supportsGrid = CSS.supports("(display: grid)");

场景1

有这样三个div。

.child{
  width:100px;
  margin:0 10px;
  display: inline-block;
  vertical-align: middle;
  background-color: pink;
}
<div style="width:400px;height: 100px;border: 1px solid #000;">
  <div class="child">div1</div>
  <div class="child">div2</div>
  <div class="child">div3<br />div3</div>
</div>


此时我们我们想将三个子div设置为等高,第一反应就是child设置height:100px;但是呢我们又不允许使用具体的值,这个时候fill-available就排上用场了!

  @supports (height: fill-available) or (height: -webkit-fill-available) {
  .child {
    height: -webkit-fill-available;
    height: fill-available;
  }
}
.child {
    width: 100px;
    height: fill-available;
    margin: 0 10px;
    display: inline-block;
    vertical-align: middle;
    background-color: pink;
  }

场景2

测试是否支持自定义属性

div {
  color: red;
}

@supports (--css: variables) {
  div {
    --my-color: blue;
    color: var(--my-color, "blue");
  }
}
<div>
<h1>
 浏览器支持变量则文字蓝色,不支持则文字红色
</h1>
</div>

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。