背景

明天PM过去问我: 蛋总,有些用户反馈他们屏幕太小了,须要滑动, 操作不不便。 咱们的零碎能不能改成自适应布局啊?

我登时虎躯一震:woc, 要把一个迭代了一年多的固定设计的产品,改成自适应布局? 真让人胆怯。

而后我就去查了一些自适应布局的材料,尝试找出一种革新老本最小的计划。

过程中发现了一个比拟好玩的货色:CSS 容器查问

容器查问容许开发者依据容器元素的大小来设置元素的款式。

它相似于 @media查问,不同之处在于它依据容器的大小不是视口的大小进行判断。

对此,我做了一下简略的整顿和总结,在此分享给大家,心愿对大家有所启发。

注释

咱们应用创立响应式设计时,通常应用媒体查问依据视口的大小来更改文档布局。

然而,许多设计都有一些通用组件,这些组件会依据其容器的可用宽度来更改布局。

这可能并不总是与视口的大小无关,而是与组件在布局中的搁置地位无关

例如,以下组件可能显示在网站布局的列中。

如果有空间,它将显示为两列,否则,咱们心愿将其重叠显示。

上图中的左右两个组件,是同一个组件,性能上是齐全一样的,只是要展现不同的布局。

目前来说, 咱们能够通过以某种形式辨认该组件,比方通过增加一个或应用其余选择器来定位元素,该选择器能够查看它在文档构造中的地位。

然而,这并不能齐全实现媒体查问在整个布局中的作用。

媒体查问使咱们可能依据视口的范畴来扭转元素的大小。

当咱们增加一个类或指标元素时,咱们决定当对象在侧边栏中时,它必须应用重叠布局。

然而,就可用空间而言,很可能是在大屏幕上,侧边栏中的对象将具备足够的空间来以并排布局显示。

容器查问将解决这种状况。

除了查看视口的大小,咱们还能够查看容器的大小,并依据容器中的空间进行布局调整。

CSS 容器查提案

容器查问, 将成为css containment标准的一部分,并向contain属性增加新值。

contain属性最后是为了性能优化而设计的。

它为Web开发人员提供了一种办法来隔离DOM的各个局部,并向浏览器申明这些局部与文档的其余部分无关。

应用contain: size;示意浏览器在两个维度上都晓得该区域的大小。

晓得它有多大的容器,正是咱们进行容器查问所须要的。

然而,通常咱们并不常常晓得这两个维度有多大。

当咱们应用媒体查问时,大多数时候咱们都会指定可用的宽度(或内联大小)。

咱们将列定义为: 该维度中,空间的百分比分数

因而,容器查问仅容许通过在一维中批示大小来扩大蕴含属性,这被形容为单轴遏制

以下CSS将创立一个仅在嵌入式轴上蕴含容器的容器,内容能够增长到在块轴上所需的大小:

.sidebar {  contain: layout inline-size;}

申明contain属性,并且把layoutsize的值叠加, 浏览器便会在该元素上创立一个containment上下文。

申明了这个属性,就意味着浏览器晓得: 我当前可能要查问此容器。

而后,能够编写一个查问来查找此蕴含上下文而不是视口大小,以便为组件制订布局决策。

应用创立容器查@container

这将查问最近的蕴含上下文。

为了使卡仅在边栏宽于700px时才显示为两列,咱们应用以下CSS:

@container (min-width: 700px) {  .card {    display: grid;      grid-template-columns: 2fr 1fr;  }}

如果布局的其余区域也是containment,那么咱们能够将组件放到那些区域中,它将主动响应相干的容器。这使得咱们能够在模式库中创立的各种组件真正可重用,而无需晓得它们所处的上下文。

其实还有很多事件能够说,上文介绍的只是一些基本概念。

另外,上文显示的基本功能都曾经能够在Chrome Canary中进行测试。

下载Canary,而后转到chrome://flags,搜寻Container Queries并启用该标记。

在线演示demo汇合

本文演示的 demo 的在线链接:
https://codepen.io/rachelandr...

以及容器查问 demo 的大汇合:
https://codepen.io/collection...

容器查问的兼容性

目前还没有浏览器反对。

容器查问的相干停顿

Blink components

https://bugs.chromium.org/p/c...

Proposed (提案阶段)

Tracking bug:
https://bugs.chromium.org/p/c...

共识和规范

Chrome浏览器中提供性能后,此处列出的值不保障是最新的。

  • Firefox: No signal
  • Edge: No signal
  • Safari: No signal
  • Web Developers: No signals

论断

CSS 容器查问,为自适应布局计划提供了一种新的思路。

然而目前还处于提案阶段, 感兴趣的能够放弃关注。

好了,本文的内容就这么多,谢谢。

相干材料

  1. https://developer.mozilla.org...
  2. https://developer.mozilla.org...
  3. https://caniuse.com/?search=%...
  4. https://www.chromestatus.com/...
  5. https://bugs.chromium.org/p/c...
  6. https://morioh.com/p/8b1afe84...

最初,如果感觉内容有帮忙, 能够关注下我的公众号,把握最新动静,一起学习!