容器查询终于来了!现在,您可以在最新版本的 Chrome Canary(处于实验性功能阶段)中使用它,尽情尝试吧。哦,如果您不熟悉容器查询,可以查看 Ethan Marcotte 关于 为何它们如此重要的文章。
Ahmad Shadeed 表达了他的兴奋之情,并 展示了大量容器查询解决问题的优秀用例
过去六年,作为一名前端开发人员,我从未像现在这样对 CSS 功能感到如此兴奋。容器查询的原型现在可以在 Chrome Canary 中通过实验性功能使用。感谢 Miriam Suzanne 等聪明人的努力,以及其他一些人的贡献。
我记得看到很多关于 CSS 容器查询支持的玩笑,但它们终于实现了。
在 chrome://flags
中激活此功能后,您可以开始编写如下代码
.parent {
container: layout inline-size;
}
@container (min-width: 400px) {
.child {
display: flex;
flex-wrap: wrap;
}
}
首先,您需要告诉父组件子组件需要更改大小(即 container: layout inline-size
部分)。接下来,您可以使用一种称为 @container
的新型查询,它将在元素的父元素宽度发生变化时进行检测。
Andy Bell 在 他的一系列优秀示例 中也指出,我们经常需要根据父元素的大小而不是浏览器窗口的宽度来更改元素,尤其是在排版方面。
最重要的是,使用容器查询,我们可以**上下文化**地设置排版!对我来说,这是**最需要的功能**,也是我一直希望拥有容器查询的原因。我们可以使用媒体查询并以此方式设置字体大小等,但是当您不知道元素最终将位于何处时,这不是理想的方法。现在有了容器查询,我们可以比以前更容易地进行有意义的类型调整。
这篇文章让我想起 Miriam Suzanne 做了一个优秀的 提案,您可以在其中了解更多关于容器查询的设计方式以及在此过程中遇到的各种问题。看到这样的文档,展示了 CSS 在公众面前得到改进,真是太棒了。
我个人认为,这是自 Grid 以来 CSS 最大的改进。它为我们日常解决的问题提供了各种优雅的解决方案。就在前几天,我想根据包装元素的宽度设置侧边栏中元素的类型时遇到了障碍。而且,如果没有引入一堆奇怪的技巧,这是不可能做到的!
容器查询不再是遥不可及的梦想。它们将留下来。
你好,CSS 容器查询!
(我先走了)
我不会感到惊讶,如果几年后普遍做法是使用容器查询而不是媒体查询来实现大多数响应式样式。大多数媒体查询实际上只是试图执行容器查询的功能,即在容器空间不足时调整元素大小或更改其布局。
我还没有研究过这个问题,但有人知道我们是否会获得类似于
vw
/vh
的单位,但用于容器吗?用于容器的 vw 已经存在,称为 %
vh 确实更复杂
在其中一篇文章中提到 https://github.com/w3c/csswg-drafts/issues/5888
@Ryo,确实需要询问正在设置样式的目标元素是否是直接后代。但是,就像
vw
参考视口一样……无论 DOM 中的深度如何。理想情况下,应该有一个单位来引用容器。现在的问题是我们仍然必须为所有未来十年不更新他们东西的人编写 CSS,即使容器查询实际上可以替代绝大多数媒体查询(根据我的经验,媒体查询 99% 是窗口大小查询)。
哇,我相信这是一个非常强大的增强功能,我们可以构建很棒的东西。这个想法,即我可以在不同的上下文中重用完全相同的组件,让我感到兴奋(例如在侧边栏或主窗格中)。