You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS @container规则疑问:为何.blog-list生效而article无响应?

CSS @container规则使用问题

我在理解CSS的@container规则时遇到了问题:该规则在.blog-list容器上能正常修改article的背景色,但在article容器上尝试根据其尺寸修改.article-content的文本颜色时毫无响应。

我一开始以为只有特定属性能被修改,尝试调整属性后没有变化;之后又修改了@container article的条件参数(比如改成max-width:300px等),问题还是没解决。

按照我的理解,声明@container XY时,只要设置了container-name:XY的元素符合条件,就会执行对应的样式规则,那我到底遗漏了什么关键点?


HTML代码

<div class="blog-list">
  <article>
    <figure>
      <img src="https://images.pexels.com/photos/1743165/pexels-photo-1743165.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Image">
    </figure>
    <div class="article-content">
    <h3><a href="#">Mon titre</a></h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin luctus erat neque, eu pulvinar justo efficitur et. Vivamus vel aliquam massa, rutrum sollicitudin ante. </p>
    <span class="link">En savoir plus</span>
    </div>
  </article>
  <article>
    <figure>
      <img src="https://images.pexels.com/photos/1743165/pexels-photo-1743165.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Image">
    </figure>
    <div class="article-content">
    <h3><a href="#">Mon titre</a></h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin luctus erat neque, eu pulvinar justo efficitur et. Vivamus vel aliquam massa, rutrum sollicitudin ante. </p>
    <span class="link">En savoir plus</span>
    </div>
  </article>
  <article>
    <figure>
      <img src="https://images.pexels.com/photos/1743165/pexels-photo-1743165.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=1" alt="Image">
    </figure>
    <div class="article-content">
    <h3><a href="#">Mon titre</a></h3>
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin luctus erat neque, eu pulvinar justo efficitur et. Vivamus vel aliquam massa, rutrum sollicitudin ante. </p>
    <span class="link">En savoir plus</span>
    </div>
  </article>
</div>

CSS代码

.blog-list {
  container-type: inline-size;
  container-name: blog;
}

article {
  background: white;
  box-shadow: 0 10px 25px rgba(0,0,0,.15);
  border-radius: 8px;
  overflow: hidden;
  background: yellow;
  container-name: article;
}

.article-content {
  padding: clamp(10px, 2.5vw, 2em) clamp(10px, 3vw, 2em);
  color: blue;
}

@container blog (max-width: 480px) {
  article {
    background: red;
  }
}

@container blog (min-width: 900px) {
  article {
    background: green;
  }
}

@container article (min-width: 200px) {
  .article-content {
    color: pink;
    background: pink;
  }
}

问题解答

你遗漏的核心点是:article元素只设置了container-name,但没有定义container-type。

CSS容器查询的生效前提是:容器元素必须通过container-type指定尺寸上下文(比如inline-size、size等),它告诉浏览器这个元素要作为“尺寸容器”,允许子元素基于它的尺寸应用样式。你之前的.blog-list能正常触发查询,就是因为给它设置了container-type: inline-size;,而article缺少这个关键属性,浏览器根本不知道要基于它的什么尺寸来判断条件,所以@container article的规则完全不会生效。

修复方法

给article添加container-type属性,比如常用的inline-size(基于容器的内联方向尺寸,也就是水平宽度):

article {
  background: white;
  box-shadow: 0 10px 25px rgba(0,0,0,.15);
  border-radius: 8px;
  overflow: hidden;
  background: yellow;
  container-name: article;
  container-type: inline-size; /* 新增这一行 */
}

添加后,@container article (min-width: 200px)的规则就会根据article的宽度触发,.article-content的样式会按预期变化。


内容的提问来源于stack exchange,提问作者Janine Margueron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:27:04