如果您还没有看到,Heydon 发布了 一个相当巧妙的 flexbox 布局模式,从某种意义上说,它模拟了您可以使用容器查询通过强制元素在特定容器宽度下堆叠来实现的功能。我对此特别感兴趣,因为当时我正在解决一个小布局问题,我认为这可能是一个解决方案。让我们来看一看。
“广告双联”单元
我在这个网站的设计中使用了这些小型广告单元。我可以在网站上的各种位置插入它们。有时它们位于这样的列中

有时我将它们放在更像全宽环境的位置

有时它们位于由灵活的 CSS 网格创建的多列布局中。

因此,实际上,它们可以几乎是任何宽度。
但是,在某个点上,我希望广告堆叠起来。当它们在窄列中挤压时,它们不再并排显示,因此我希望它们改为上下排列,而不是左右排列。

我不关心屏幕有多宽,我关心的是这些广告所在的空间
我发现自己正在编写媒体查询以使这些广告从并排显示变为堆叠显示。我将在一个地方“修复”它,但又会在另一个地方破坏它,因为相同的媒体查询在其他上下文中不起作用。我需要一个该死的容器查询!
这就是 Heydon 的信天翁技术的魅力所在。我希望它们断开的点大约是 560px,所以我打算使用它。
转换
我之前已经使用 flexbox 来布局这些广告双联,因此唯一更改的是使其换行、插入花哨的 4 属性信天翁魔法,并调整边距处理,以便它不需要媒体查询来重置自身。
这是整个差异

它运行良好!
在 Firefox 开发者工具中查看
Victoria Wang 最近撰写了关于 设计 Firefox 开发者工具 Flexbox 检查器 的文章。我不得不打开 Firefox 开发者版进行检查!它非常酷!
对我来说,最酷的部分是它如何向您展示单个弹性项目如何达到其渲染大小。众所周知,这可能会变得有点古怪,因为很多事情都会影响它,例如 flex-basis
、flex-grow
、flex-shrink
、max-width
、min-width
等。

以下是信天翁技术显示的内容
我喜欢这种创新!而且我可能自己会使用媒体查询。如果我继承了一个使用这种策略来处理看似简单的过程的网站,我可能会感到非常困惑,甚至不安。但仍然很高兴看到最新的 CSS 布局技术可以为我们提供什么。
关键在于,至少目前还没有任何媒体查询可以做到这一点。
这是一个改变游戏规则的技术!我很久以前就希望有一个内容宽度媒体查询,我认为,这种技术可以很好地完成这项工作 :)
没有媒体查询趋势,这可能是目前不错的做法。在我看来,这很混乱,当我可以使用时,我宁愿坚持使用调整大小观察器。使用 webcomponents 的声明式方法将是我的解决方案。
我在网络上的流体排版方面也遇到了同样的问题。一段时间后,没有人能理解这段聪明的代码。
这些流体排版技巧对于
font-size
来说就像cubic-bezier
对于过渡或动画时间函数一样。当然,如果这些技巧以某种方式标准化,例如font-size: linear-font-size(30rem, 1rem, 75rem, 1.2rem)
或更简单的linear(x1: 从此视口宽度,y1: 从此字体大小,x2: 到此视口宽度,y2: 到此字体大小)
,那将会有所帮助。在 x/y 轴上可视化函数曲线是记住其工作原理的好方法,就像对于 cubic-bezier 一样。许多原生 CSS 函数或值也隐藏了复杂的数学运算,例如混合模式和滤镜。我只是在为这些流体排版技巧辩护。我并不是想证明我能理解一段时间后的聪明代码,而你不能。 :)
前几天阅读了 Heydon 的文章。表达清晰,更有帮助。在原生容器查询出现之前,这是一个彻底的改变游戏规则的技术。
嘿,Chris,你不能只通过在广告单元上设置“flex: 1 280px;” (或适当的像素值) 来实现这一点吗?看起来“flexbox 信天翁”实际上只有在 3 个或更多弹性项目时才有用,除非我遗漏了什么。
嗯,我认为你可能是对的。让我来过度思考一下。我尽快会尝试一下,但是的,我认为对于只有 2 个元素可以增长但不能缩小的元素,使其在最小值处断开以及当 flex 填充新空间时断开会容易得多。
奇怪的 flex,但可以
如何为此使用 Grid?最小列值将用作我们的断点。也许我会这样做。
我使用这种技术制作了一个 scss 混合。
Codepen
现在,如果有一种方法可以对 srcset 执行此操作就好了……
这种技术能否用于不等列?