#书摘 #css #前端
《CSS 选择器世界》empty伪类
先来了解一下 :empty 伪类的基本匹配特性。
1. :empty 伪类用来匹配空标签元素。例如:
此时,:empty伪类会匹配
2. :empty伪类还可以匹配前后闭合的替换元素,如
在所有浏览器下都呈现为双实线
3. :empty伪类还可以匹配非闭合元素,如
4. :empty伪类可以匹配什么样的元素?如果没有深入研究,你大概会认为:empty伪类可以匹配没有任何子元素、不显示任何内容的元素。但如果深入细节,就会发现这其中存在误解。
- :empty伪类与空格
如果元素内有注释,:empty伪类是否可以匹配?多数人会觉得不匹配,这是完全正确的。例如:
但如果元素内有一个空格或者标签内有换行符呢?实际上,:empty伪类依然无法匹配。例如,有以下两种情况。
- 不能有空格:
- 不能有换行符:
因此,实际开发的时候,如果遇到:empty伪类匹配无效的场景,要仔细查看HTML代码,看看标签内是否有空格或者换行符。尤其是使用一些渲染模板的时候,明明没有任何列表内容,但:empty伪类就是无法匹配,这可能是换行符或者空格导致的。不过根据具体实践,一些流行的开发框架(如Vue等)会自动去除空格,这有利于在实际项目中灵活使用:empty伪类。
:empty伪类忽略空格的特性不符合我们的直观认知,W3C官方也收集到了很多这样的意见,所以**在CSS选择器Level 4规范中已经开始明确:empty伪类可以匹配只有空格文本节点的元素**,但是直到撰写本章的时候还没有任何浏览器支持。因此,为安全起见,实际开发中大家还是按照无空格标准来进行。
https://memo.cosine.ren/m/348
《CSS 选择器世界》empty伪类
先来了解一下 :empty 伪类的基本匹配特性。
1. :empty 伪类用来匹配空标签元素。例如:
<div class="cs-empty"></div>
.cs-empty:empty {
width: 120px;
padding: 20px;
border: 10px dashed;
}
此时,:empty伪类会匹配
<div>
元素,呈现为虚线框。2. :empty伪类还可以匹配前后闭合的替换元素,如
<button>
元素和 <textarea>
元素。例如:
<textarea></textarea>
textarea:empty {
border: 6px double deepskyblue;
}
在所有浏览器下都呈现为双实线
3. :empty伪类还可以匹配非闭合元素,如
<input>
元素、`<img>` 元素和 <hr>
元素等。但实际开发中很少有需要使用:empty伪类匹配非闭合元素的场景。4. :empty伪类可以匹配什么样的元素?如果没有深入研究,你大概会认为:empty伪类可以匹配没有任何子元素、不显示任何内容的元素。但如果深入细节,就会发现这其中存在误解。
- :empty伪类与空格
如果元素内有注释,:empty伪类是否可以匹配?多数人会觉得不匹配,这是完全正确的。例如:
<!-- 无法匹配:empty伪类 -->
<div class="cs-empty"><!-- 注释 --></div>
但如果元素内有一个空格或者标签内有换行符呢?实际上,:empty伪类依然无法匹配。例如,有以下两种情况。
- 不能有空格:
<!-- 无法匹配:empty伪类 -->
<div class="cs-empty"> </div>
- 不能有换行符:
<!-- 无法匹配:empty伪类 -->
<div class="cs-empty">
</div>
因此,实际开发的时候,如果遇到:empty伪类匹配无效的场景,要仔细查看HTML代码,看看标签内是否有空格或者换行符。尤其是使用一些渲染模板的时候,明明没有任何列表内容,但:empty伪类就是无法匹配,这可能是换行符或者空格导致的。不过根据具体实践,一些流行的开发框架(如Vue等)会自动去除空格,这有利于在实际项目中灵活使用:empty伪类。
:empty伪类忽略空格的特性不符合我们的直观认知,W3C官方也收集到了很多这样的意见,所以**在CSS选择器Level 4规范中已经开始明确:empty伪类可以匹配只有空格文本节点的元素**,但是直到撰写本章的时候还没有任何浏览器支持。因此,为安全起见,实际开发中大家还是按照无空格标准来进行。
https://memo.cosine.ren/m/348