利用React实现多个场景下的鼠标跟随框提示框

本文介绍了CSS容器查询的引入及其在React应用中的重要性,详细阐述了如何利用容器查询来实现组件根据父级容器宽度的响应式布局。通过具体的代码示例,展示了如何使用 和 属性进行容器查询,并提到了命名容器以避免混乱的方法。目前,容器查询已得到Chrome 105的支持,并计划在Safari 16中推出。文章提供了10个实战案例链接,供读者进一步探索。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS容器查询终于来了! 它们目前在谷歌浏览器(105)中得到了支持,很快就会在Safari 16中得到支持。这对前端来说容器查询与媒体查询一样重要。

在这节课中,我们介绍一下容器查询是如何工作的,如何使用它们,以及语法是什么样子的,并分享一些现实生活中的例子和用例。

简介

在设计一个组件时,我们需要适配不同的变化,并根据CSS类或视口大小来改变它们。这对于我们开发来说不是很理想,会迫使我们根据变化类或视口尺寸来写CSS。

考虑下面例子:

我们有一个卡片组件,当视口足够大时,它应该切换到水平样式。乍一看,这可能听起来不错。然而,当你更深入地思考这个问题时,它就有点复杂了。

如果我们想在不同的地方使用同一个卡片组件,比如在空间狭小的侧边栏和有更多空间的主区域,我们就需要使用不同的类来适配:

.c-article {/* Default stacked style */
}

@media (min-width: 800px) {/* Horizontal style. */.c-article--horizontal {display: flex;align-items: center;}
} 

如果我们不想用上面的方式,那么会出现下面这样的情况:

这种从用户界面的角度来看,并不友好。

通过容器查询,我们可以简单地编写响应父级或容器宽度的CSS。请看下图:

注意到在媒体查询中,我们是如何根据视口或屏幕宽度来查询一个组件的。在容器查询中,同样的情况发生在父级上。

什么是容器查询?

通过 container-type 属性查询一个组件与最接近的父类的关系,该父类有一个定义的包含物。

我们过去在媒体查询中写CSS的方式,但只是针对组件层面。

容器查询语法

要根据一个组件的父级宽度查询,我们需要使用 container-type 属性。看下面的例子"

.wrapper {container-type: inline-size;
} 

有了这些,我们就可以开始查询一个组件。在下面的例子中,如果.card元素的容器的宽度等于400px或更大,我们需要添加一个特定的样式。

@container (min-width: 400px) {.card {display: flex;align-items: center;}
} 

虽然上述方法可行,但当有多个容器时,就会造成混乱。为了避免这种情况,最好为一个容器命名。

.wrapper {container-type: inline-size;container-name: card;
} 

现在,我们可以在 @container 旁边加容器名称,如下所示。

@container card (min-width: 400px) {.card {display: flex;align-items: center;}
} 

完整代码:

.wrapper {container-type: inline-size;container-name: card;
}

.c-article {/* Default stacked style */
}

@container card (min-width: 400px) {/* Horizontal style. */.c-article {display: flex;align-items: center;}
} 

浏览器支持

容器查询现在在Chrome 105中得到支持,并很快在Safari 16中得到支持。

事例

这边有10个关于容器查询的事例,地址:lab.ishadeed.com/container-q…

来源:ishadeed.com/article/con…

代码部署后可能存在的BUG没法实时知道,事后为了解决这些BUG,花了大量的时间进行log 调试,这边顺便给大家推荐一个好用的BUG监控工具 Fundebug

最后

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

有需要的小伙伴,可以点击文末卡片领取这份文档,无偿分享

部分文档展示:



文章篇幅有限,后面的内容就不一一展示了

有需要的小伙伴,可以点下方卡片免费领取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值