:empty

Avatar of Matt DeCamp
Matt DeCamp

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费信用额度!

CSS :empty 伪类选择任何对给定选择器没有包含子元素的元素。

/* Changes the background color of every empty section element */
section:empty {
  background-color: tomato;
}

如果我们在页面上运行该代码,CSS 将寻找一个不包含标签之间内容的 <section> 元素。 这可能看起来像这样

<section>
  <p>I have content</p>
</section>

<section>
  <p>I have content, too!</p>
</section>

<section> // HIGHLIGHT
  <!-- No content, just an HTML comment. 🎺 -->
</section>

是什么让元素“为空”?

标签之间没有任何内容的元素为空。

<div></div>

包括如果元素包含代码注释。

<div><!--I'm still empty, even with this comment. --></div>

以及如果元素的 CSS 生成了 content(例如来自像 ::before::after 这样的伪元素),它也被认为是空的。

div::before {
  content: "Yep, still empty!;"
}

具有子元素的元素(又称“非空”元素)

如果元素包含另一个元素节点、文本甚至标签之间的文本空白,则称该元素具有“子元素”。 下列代码中的元素被认为是“非空”元素。

<article>
  <h1>I'm a child of this article element.</h1>
</article>

<p>This text is considered a child.</p>

<!-- Even whitespace between tags qualifies this element as "non-empty" -->
<h1>   </h1>

但请注意! 代码编辑器可能会创建不必要的空白,使原本为空的元素变为非空元素。

<section>
  <!-- The white space in this element makes it a "non-empty" element -->
</section>

现在它类似于 :-moz-only-whitespaces

:empty选择器级别 4 规范 中被更新为类似于 Mozilla 的带前缀的 :moz-only-whitespace 伪类。 就像 :empty 一样,:moz-only-whitespace 选择空元素。 不同的是,:moz-only-whitespace 还选择仅包含文本空白的元素。 该规范解释得非常好

在选择器的级别 2 和级别 3 中,:empty 不会匹配仅包含空白的元素。 这已更改,因此考虑到空白在 HTML 中很大程度上是可以折叠的,因此用于源代码格式化,尤其是因为省略结束标签的元素可能会将此类空白吸收到其 DOM 文本内容中,因此作者认为为空的元素可以通过此选择器进行选择,因为他们期望如此。

所以,是的。 此更改更有可能使 :empty 按预期方式工作,因此即使元素内存在某些元素(例如 <br>)或格式化的空白,它们也不会阻止元素被认为为空。

但是,目前没有对此更改的 浏览器支持

它不适合表单验证

你会认为它可以! 但是,如果我们尝试将 :empty 应用于 <input> 并希望将其变为红色以向用户显示它需要完成,那么该输入将始终为红色。

为什么? 这是因为 :empty 搜索空容器内容,但输入被认为是空元素,即使可以向其中键入内容。

演示

空导航项

在此示例中,当导航中的 li 元素没有内容时,它会被删除。 点击按钮以切换第三个导航项的空状态。

空 API 字段

这里,:empty 伪选择器帮助我们向用户显示一个指示,以便将笑话加载到同一字段中。

浏览器支持

IEEdgeFirefoxChromeSafariOpera
9+
Android ChromeAndroid FirefoxAndroid 浏览器iOS SafariOpera Mobile
来源: caniuse

支持匹配带有空格的元素

IEEdgeFirefoxChromeSafariOpera
Android ChromeAndroid FirefoxAndroid 浏览器iOS SafariOpera Mobile
来源: caniuse

更多信息