首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“显示:内容”属性值是如何工作的?

“显示:内容”属性值是如何工作的?
EN

Stack Overflow用户
提问于 2019-04-30 13:37:59
回答 2查看 1K关注 0票数 3

我正在使用display:contents属性值与一个element > element选择器配对。根据W3Schoolsdisplay: contents属性值

使容器消失,使元素的子元素在DOM中处于下一级。

(强调我的)。

因此,我有一个示例代码:

代码语言:javascript
运行
复制
.wrapper {
  background-color: red;
}

.hidden {
  display: contents;
}

.wrapper > .child {
  background-color: yellow;
}
代码语言:javascript
运行
复制
<div class='wrapper'>
  <div class='hidden'>
    <div class='child'>I'm a child</div>
    <div class='child'>I'm a child</div>
  </div>

  <div class='child'>I'm a child</div>
  <div class='child'>I'm a child</div>
</div>

我本来以为所有的孩子都是黄色背景的,因为element> element选择器应该把他们都作为目标(当属性display: contents发挥作用时,他们都在同一级别)。

为何不是这样呢?CSS不能以这种方式针对孩子吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-30 13:45:51

来自官方 CSSWG 规格说明

内容 元素本身不生成任何框,但是它的子元素和伪元素仍然生成盒子和文本。为了生成框和布局,元素必须被元素树中的内容替换(包括源文档子元素和伪元素,例如:前和:后伪元素,这些元素通常在元素的子元素之前/之后生成)。 注意:由于只有框树受影响,基于文档树的任何语义,如选择器匹配、事件处理和属性继承,都不会影响。..。

大胆的部分(强调我的)是你正在寻找的答案。

还请注意短语:“必须将其视为元素树中的内容已被替换”。因此,元素并不是真正被删除,而是为了更容易解释,就像元素被移除并被其内容替换一样。

PS:避免使用www.w3schools.com作为像这样的精确定义的官方参考。他们可以很好地解释一般的事情,但往往不能给出精确和准确的定义。

票数 8
EN

Stack Overflow用户

发布于 2019-09-02 06:35:42

添加到Temani Afif的答案中,下面是元素框子树与display: contents on .hidden的可视化

代码语言:javascript
运行
复制
<div class='wrapper'>
  <!-- <div class='hidden'> -->
    <div class='child'>I'm a child</div>
    <div class='child'>I'm a child</div>
  <!-- </div> -->

    <div class='child'>I'm a child</div>
    <div class='child'>I'm a child</div>
</div>

下面是另外两个元素的并行比较,其中一个中间层元素是.hidden

代码语言:javascript
运行
复制
div { padding: 1em; }
.wrapper { display: inline-block; vertical-align: top; background-color: red; margin: 1em; }
.wrapper > div { background-color: orange; }
.hidden { display: contents }
.child { background-color: yellow; }
代码语言:javascript
运行
复制
<div class='wrapper'>
  <div class='hidden'>
    <div class='child'>I'm a child</div>
    <div class='child'>I'm a child</div>
  </div>
</div>

<div class='wrapper'>
  <div>
    <div class='child'>I'm a child</div>
    <div class='child'>I'm a child</div>
  </div>
</div>

实际上,它被呈现为.hidden本身并不存在(在伪代码中被“注释掉”表示),而它自己的孩子则是.wrapper (以及.wrapper自己的孩子的兄弟姐妹)的孩子。这就是display: contents的本质意思。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55922178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档