CSS display contents 总结

看了很多文章,大家都没讲到重点,且最近浏览器也对 display: contents 做了更新或 bugfix,本文站在 2025 年总结下。

💭 WHAT

display: contents,这是 CSS 中一个很有用的属性值。它可以让一个元素在布局中"消失",但它的子元素仍然会保留在文档流中,就好像这个元素从未存在过一样。这意味着,原本由这个元素生成的框 (包括背景、边框、内边距等)都不会被渲染,但它的子元素仍然会继承它的颜色、字体等属性 ,并且可以参与到上一层级的布局中。这在需要保持 HTML 语义结构的同时或无法修改 HTML 布局时,又想让某些元素在视觉上或布局上消失时非常有用。

🤷‍♂️ WHY

display: contents 是一个用于创建布局的了不起的功能。它允许你将 flex 项或 grid 项的子元素视为它们自己就是 flex(grid) 项。换句话说,你可以将嵌套的 DOM 树"展平 ",以便在一个 flex 或 grid 系统内使用它。如果你无法更改当前布局的 DOM 结构,或者出于任何原因不想更改它,但仍然希望使用 flex(grid) 能力来移动和重新定位元素------不仅适用于 flex(grid) 布局内的兄弟元素,还包括它们的子元素和孙子元素

------ stackoverflow.com/questions/7...

"消失"描述成"flatten"可能更形象,其目的是让内部元素参与外部布局,参与外部布局有什么用?在 flex / grid 布局中,只有直接子元素才会被认为是 flex / grid item,才能被其影响。这就是 display: contents 用武之地。

🍽️ 使用场景

让非直接子元素参与 flex / grid 布局

html 复制代码
<section style="display: flex">
   <div>A</div>
   <div> // <- `display: contents`  让 div 从 UI 上隐藏,让其子元素参与其爷爷 section 的 flex 布局
         <span class="b1">B1</span>
         <span class="b2">B2</span>
    </div>
    <div>C</div>
</section>

详见 stackoverflow.com/questions/7... 第二个回答即可。

无法修改 HTML 布局,比如 Antd 组件

比如想"一键"去除 padding 或 margin border 等 box 属性,可以使用 display: contents,非常方便。

👩‍🦽 无障碍问题

经试验 Chrome 最新版本没有该问题,如果有问题是浏览器实现没有遵循 CSS 规范。故应该放心使用。

https://developer.mozilla.org/en-US/docs/Web/CSS/display#contents

📚 本文参考

相关推荐
干前端8 小时前
Vue3 组件库工程化实战:BEM 命名规范与 useNamespace 深度解析
前端·css
RFCEO9 小时前
前端编程 课程十四、:CSS核心基础2:选择器优先级 + 伪类选择器(解决冲突+交互效果)
前端·css·交互·css选择器优先级判断规则详解·css important使用·css链接伪类lvha顺序·实现悬浮交互效果
小满zs10 小时前
Next.js第二十五章(CSS方案)
开发语言·javascript·css
红色的小鳄鱼10 小时前
Vue 监视属性 (watch) 超全解析:Vue2 Vue3
前端·javascript·css·vue.js·前端框架·html5
Hacker_Z&Q1 天前
CSS 笔记2 (属性)
前端·css·笔记
CappuccinoRose1 天前
CSS前端布局总指南
前端·css·学习·布局·flex布局·grid布局·float布局
强子感冒了1 天前
CSS基础学习:CSS选择器与优先级规则
前端·css·学习
layman05282 天前
webpack5 css-loader:从基础到原理
前端·css·webpack
半桔2 天前
【前端小站】CSS 样式美学:从基础语法到界面精筑的实战宝典
前端·css·html
_OP_CHEN2 天前
【前端开发之CSS】(一)初识 CSS:网页化妆术的终极指南,新手也能轻松拿捏页面美化!
前端·css·html·网页开发·样式表·界面美化