Heydon 的 <watched-box>
是一个非常棒的工具。它是一个自定义元素,本质上是通过根据 ResizeObserver
计算的大小断点添加到框中的类名来实现容器查询。它就像 菲利普几年前谈论的 一个更简洁的版本。
我相信我很乐意在生产中使用 <watched-box>
,因为它轻量级,没有依赖项,并且具有直接的方法。
在开发方面,我想到使用 Zach 有趣的 <resize-asaurus>
网页组件。它将元素包裹在另一个可以通过 CSS 调整大小的框中,并用当前宽度对其进行标记。这样,您就不必调整整个浏览器窗口来调整大小——任何给定的元素都可以调整大小。同样,这仅仅是为了开发和测试的原因。
您将它们组合在一起,例如...
<resize-asaurus>
<watched-box widthBreaks="320px, 600px">
<div class="card">
...
</div>
</watched-box>
</resize-asaurus>
这允许您在断点处编写 CSS,例如...
.card {
.w-gt-320px & { }
.w-gt-600px & { }
}
这当然不是容器查询语法最终的 CSS 语法,但它通过清晰易懂的生成类名实现了相同的功能。
示例!
实时演示!
喜欢这些使用 ResizeObserver 来更新元素本身更新时的最新探索。它似乎是我
<style-container>
想法的稍微更新的版本,其中我将每个<style-container>
元素视为它自己的“视窗”,并将内部的任何@media
查询解释为基于该<style-container>
元素尺寸的元素查询!探索 HTML 的声明性方面很有趣,像这样的自定义元素非常适合! https://twitter.com/innovati/status/1086472249660637184watched-box 的代码还有改进的空间。例如,它添加了 N 个 div 来检查大小,当存在 N 个断点时。如果每次尺寸发生变化时,有 10-20 个项目附加和删除 2-3 个 div,我会很不舒服。