A. *_*lff 17 css css-selectors pseudo-class css3
我正在尝试将<div>后续的样式设置为空<ul>.
这是我正在测试的简单代码:(操作系统是win7)
HTML:
<button class="btnAdd">add new LI</button>
<button class="btnRemove">remove last LI</button>
<ul></ul>
<div>Should be red if UL is empty</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
ul:empty + div {
color:red;
}
Run Code Online (Sandbox Code Playgroud)
jQuery :(与问题无关,仅用于测试目的)
$('.btnAdd').on('click', function () {
$('ul').append('<li>LI</li>');
});
$('.btnRemove').on('click', function () {
$('ul').find('li').last().remove();
});
Run Code Online (Sandbox Code Playgroud)
预期行为:
在所有主要的浏览器,添加元素时<ul>,空的风格集<ul>以下<div>不宜应用.删除所有时<li>,应将样式重新应用于目标<div>.
目前的行为:
:empty默认只应用CSS 伪类,不对任何添加或删除的内容做出反应谷歌搜索它,我发现了一些解决方法,但大多数似乎已过时,没有解决问题,至少我找不到.
对于chrome,我发现:empty为UL 设置一个CSS规则修复它,但实际上我不知道发生了什么:(ul:empty {}你这是一个空的CSS规则吗?!)< - 我想现在它强制重新绘制UI在铬?!
不幸的是,这并不能解决IE10/11上的行为问题.
更新1:
似乎bug与下一个兄弟选择器有关+,即使使用~不会给chrome提供一致的结果.但是,如果将风格直接:empty元素,一切似乎在所有浏览器正常工作:http://jsfiddle.net/EyEa7/
但在这里我的目标就是要在目标的同级元素:empty元素,不能直接空元素.
更新2:
强制UI重绘会在所有浏览器上修复它,例如使用$('body').hide().show(0);一次内容已更新:请参阅DEMO强制重绘
但是,我真的更感谢一个不涉及任何JavaScript代码的修复.
现在的问题可能是:
像这样的东西会起作用,但它并不是特别漂亮:
ul:empty {}
ul:empty + div {
color: red;
}
ul + div {
animation: repaint 1000s infinite linear;
}
@keyframes repaint {
from { zoom: 1; }
to { zoom: 0.99999; }
}
Run Code Online (Sandbox Code Playgroud)
请参阅:http://jsfiddle.net/vd2Hx/
在Chrome,Firefox,Safari,Opera和IE中测试过.