CSS/HTML:ul:空选择器与空列表不匹配

Jak*_*ake 13 html css css-selectors

我有以下CSS和HTML代码:

<ul id="actions" class="frame frame-yellowglow">
</ul>
Run Code Online (Sandbox Code Playgroud)

CSS

ul#actions {
    clear: left;    
    width: calc(60% - 2px);
    margin: 5px auto;
    padding: 10px 0px;
    text-align: center;
}
ul#actions:empty {
    margin: 0;
    padding: 0;
}
ul#actions li {
    display: inline;
    margin: 0px 3px;
}
.frame {
    border-radius: 5px; 
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
    border: 1px #dddddd solid;
}
.frame:empty {
    border: none;
    box-shadow: none;
}
.frame-yellowglow {
    border: 1px #D4B700 solid;
    box-shadow: 0 0 4px #D4B700;
}
Run Code Online (Sandbox Code Playgroud)

ul填充与可以执行某些操作的图标.但是,ul当空的时候,它与:empty选择器不匹配,因此仍然呈现; 边框,填充,阴影和所有.

[编辑:澄清一下,我在这里谈论尚未添加元素的时间.即使内部没有任何内容,它仍然与:empty选择器不匹配.]

为什么会这样?

gka*_*pak 19

MDN称

:empty伪类表示任何没有子元素的元素.仅考虑元素节点和文本(包括空格).

你的"空" ul可能包含一个空白文本节点.

  • @Jake:是的,`\n`和`\ t`被认为是用于`:empty`的空格.这绝对不方便; 我相信有一个新的选择器的建议,它将匹配一个空元素或只包含空格的元素. (5认同)