CSS整洁之道——:is()、:where()和:has()的用法

在这里插入图片描述

让我们写出优雅界面的CSS,它也总是把自己进化得更加优雅。

今天我们花5分钟时间学习三个优雅的CSS伪类::is():where():has()

:is() - 取代组合选择器

:is() 允许你在一个规则中包含多个选择器。它接受一组选择器作为参数,并应用样式到匹配的元素上。

/* 传统方法 */
ul > li > a, 
ol > li > a, 
nav > ul > li > a, 
nav > ol > li > a { 
  color: blue; 
}

/* 使用 :is() */
:is(ul, ol, nav > ul, nav > ol) > li > a { 
  color: blue; 
}

:is() 可以简化多层嵌套和多种选择器组合的写法,让你维护样式更方便。

:is() 优先级依然遵循CSS选择器的优先级规则,即 ID -> 类 -> 元素 的顺序。

:is(.class1) a {
  color: blue;
}

:is(#id1) a {
  color: red;
}

这段代码里两条规则如果命中相同的元素,那么第二条会优先应用。

:is() 的参数也可以传一个匹配规则

:is([class^="is-styling"]) a {
  color: yellow;
}

这样的写法会匹配所有 class 开头是 is-styling 的选择器。

:where() - 拥有最低优先级

:where():is() 相似,都可以传入选择器或者匹配规则来简化你的CSS代码。

:where([class^="where-styling"]) a {
  color: yellow;
}

但和 :is() 不同的是,:where() 拥有最低优先级,这样的好处是它定义的样式规则不会影响其他样式规则,避免了样式冲突。

/* <footer class="where-styling">……</footer> */

footer a {
  color: green;
}

:where([class^="where-styling"]) a {
  color: red
}

当有其他规则和 :where() 同时被命中时,:where() 一定是失效的。所以上面这个例子实际效果是链接显示绿色。

:has() - 基于其他元素进行匹配

:has() 可以根据直接后代元素的存在来匹配元素

/* 选择直接包含 p 元素的 div */
div:has(> p) {
  border: 1px solid black;
}

也可以根据紧邻的下一个兄弟元素来匹配元素

/* 选择后面跟着 p 元素的 div */
div:has(+ p) {
  border: 1px solid black;
}

你还可以把它跟其他伪类一起使用,比如 :has():is() 一起使用

:is(h1, h2, h3):has(+ :is(h2, h3, h4)) {
  margin: 0 0 0.25rem 0;
}

:is(h1, h2, h3):has(+ h2, + h3, + h4) {
  margin: 0 0 0.25rem 0;
}

:has() 使用场景很多,只要是强互动的页面都可能用到,以后有机会单独分享一篇~

总结

大部分浏览器的新版本都已支持 :is():where():has() 这三个伪类了,如果你的项目跑在低版本的浏览器中,那么需要考虑一下回退策略。

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
CSS中,display属性用来规定元素生成框的类型。有以下几种常见的用法: 1)inline:显示为内联元素,此元素前后无换行符。这意味着元素不会独占一行,可以与其他内联元素在同一行显示。 2)block:显示为块级元素,此元素前后会带有换行符。这意味着元素会独占一行,并且会自动换行。 3)inline-block:显示为行内块元素。它可以像内联元素一样在同一行显示,并且可以设置宽度和高度等块级元素的属性。 4)none:不被显示。元素将完全不显示,不占用空间。 5)flex:显示为一个灵活的容器,可以通过设置子元素的属性来控制元素的布局。 这些只是display属性的几种常见用法,还有其他更多的取值方式可以根据需要使用。 对于学习CSS的同学来说,可以参考一些包含CSS样式设置的实例文档,如“网页设计作业成品文档”,这样的文档会展示具体样式设置的代码和效果,有助于理解和学习CSS的使用。此外,如果想进一步了解display属性的详细用法,可以参考CSS的相关文档或者查阅CSS教程。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [网页设计作业成品文档(HTML+CSS+JS).docx](https://download.csdn.net/download/arthas777/88240442)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [CSS之display用法](https://blog.csdn.net/qq_32403063/article/details/102771996)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigYe程普

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值