2014-10-10 38 views
3

我当前的代码看起来是这样的:元素仅可见,如果有通过CSS没有兄弟姐妹

if list.isEmpty() { 
    output("<div>No items</div>") 
} else { 
    for each item in list 
     optput("<div>" + item + "</div>") 
} 

然而,整个“没有项目”逻辑属于视图和应该远离逻辑。理想情况下,我想刚才

for each item in list 
    optput("<div>" + item + "</div>") 

,然后让HTML模板是这个样子:

<div id="container"> 
    <div style="visible only if no siblings">No items</div> 
    <div>Item 1</div> 
    <div>Item 2</div> 
<div> 

的问题是,我无法弄清楚如何做"visible only if no siblings"部分。有没有办法使用CSS可靠地实现这一点(适用于所有标准浏览器)?

+0

我发现这篇文章,也许这将有助于http://www.hagenburger.net/BLOG/Look-Ahead-CSS-Selectors.html – 2014-10-10 11:52:50

回答

6

给你希望看到只有没有兄弟姐妹一类特殊股利:

<div id="container"> 
    <div class="vis-only-no-siblings">No items</div> 
    <div>Item 1</div> 
    <div>Item 2</div> 
<div> 

只要申报单没有其他的兄弟姐妹,你就可以使用:only-child pseudoselector,像这样:

#container div.vis-only-no-siblings{ 
    display: none; 
} 

#container div.vis-only-no-siblings:only-child { 
    display: block; 
} 
+0

嗯。但是如果我加上'

Item 1
',这不会被第一条规则所覆盖,并且是不可见的吗? – aioobe 2014-10-10 12:02:41

+0

是的,它会被第一条规则覆盖,但是如果它没有兄弟姐妹,它也会被第二条规则覆盖,它具有更高的特异性 - 因此它将最终可见。 – kmoe 2014-10-10 12:03:57

+0

我喜欢这种方法。我在想,也许最好使用'display:{none,initial}'来代替? – aioobe 2014-10-10 12:07:29