发布于 2026-01-05 3 阅读
0

CSS :empty 选择器 DEV 的全球展示挑战赛,由 Mux 呈现:展示你的项目!

CSS :empty 选择器

由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!

CodeTidbit 由 SamanthaMing.com 提供

我们经常需要设置包含内容的元素的样式。但如果一个元素没有任何子元素或文本呢?很简单,你可以使用:empty选择器🤩

<p> </p><!-- NOT empty: note the blank space -->
<p></p><!-- YES empty: nothing inbetween -->
p::before {
  font-family: "FontAwesome";
  content: "\f240";
}

p:empty::before {
  content: "\f244";
}

p {
  color: silver;
}

p:empty {
  color: red;
}

什么才算空?

我第一次遇到这个问题时,对于这个属性如何定义“空”存在一些困惑。我们这里就采用MDN 的定义吧:

CSS 伪类 `:empty` 表示任何没有子元素的元素。子元素可以是元素节点或文本(包括空格)。注释、处理指令和 CSS 内容不会影响元素是否被视为空元素。

为空

只要没有空格,它就是一个空元素。

<p></p>

注释之间的部分也被视为空元素,只要没有空格即可。

<p><!-- comment --></p>

不为空

空格不被视为空字符。即使是换行符,里面也有空格,所以它不是空字符!我特意强调这一点,因为我也犯过同样的错误😅

<p> </p>

<p>
<!-- comment -->
</p>

包含子元素也算作非空元素。

<p><span></span></p>

使用示例:empty

好的,让我们来看一些使用:empty.

使用:empty表单错误消息

正是这个例子让我第一次发现了这个功能:empty。我想在错误信息前添加一个❌图标。但问题是,即使没有错误信息,图标也会出现。不过没关系,我可以用这个功能,:empty只在出现错误信息时才添加图标👍。

CSS

.error:before {
  color: red;
  content: "\0274c "; /* ❌ icon */
}

HTML

<!-- No error message -->
<div class="error"></div>

<!-- Yes error message -->
<div class="error">Missing Email</div>

输出

没有空

:empty

:empty在警报中使用

以下是使用:empty隐藏空状态的另一个例子。

.alert {
  background: pink;
  padding: 10px;
}
.alert:empty {
  display: none;
}

HTML

<div class="alert"></div>
<div class="alert">Alert Message</div>

输出

没有空

:empty

浏览器支持

这项支持真的非常棒。它支持到 Internet Explorer 9 🙌

社区示例

:empty我在尝试为表单中的空白错误信息设置样式时发现了这一点<div class="error"></div>。现在不再需要 JavaScript 了,我可以用纯 CSS 实现 👍

💬 你还知道哪些其他应用场景?

  • @delusioninabox修复了用户创建内容中空段落标签间距不齐的问题。😅

  • @hkfoster我用它来消除模板端无法清除的大量随机生成的选择器。👍

  • @sumurai8移除空段落的内边距

  • @_ottenga这个通知点很不错(如果为空则不可见,如果包含数字,例如,则会显示为红色,数字显示在圆点内)。

  • @stephenjbell li:empty { visibility:hidden; }让空列表项充当列表中间的段落分隔符(没有项目符号)。

社区意见

  • @bourhaouta关于 :empty 还有一点,它不会选中包含空格的元素,另一方面我们有 :blank,但它的支持还不完善😔

  • @link2twenty我很高兴看到像这样鲜为人知的功能得到关注!值得注意的是,当 4 级选择器推出时,空白也会被计入其中 🙂。

资源


感谢阅读❤
欢迎关注!Instagram | Twitter | Facebook |博客| SamanthaMing.com

文章来源:https://dev.to/samanthaming/css-empty-selector-b6f