2014-10-10 40 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