2011-04-05 121 views
1
<div id="foo"> 
    <a id="bar1">show me</a> 
    hide me 
    <a id="bar2">hide me too</a> 
</div> 

如何使用CSS(display:none;)只具有第一a元素可見?隱藏在CSS無標籤元素

回答

2

This won't work

#foo { 
    display: none 
} 
#bar1 { 
    display: block 
} 

This works,但visibility: hidden有它自己的缺點:

#foo { 
    visibility: hidden 
} 
#bar1 { 
    visibility: visible 
} 

display: inline-block/block貌似是需要作出這個work in IE8

這是最接近你可以得到不changing your HTML

HTML:

<div id="foo"> 
    <a id="bar1">show me</a> 
    <span>hide me</span> 
    <a id="bar2">hide me too</a> 
</div> 

CSS:

#foo span, #bar2 { 
    display: none 
} 
+0

'能見度'技巧的作品!缺點是跨瀏覽器問題? – ash 2011-04-05 22:39:15

+1

這不是我想到的。我的意思是,具有'visibility:hidden'的元素仍然會佔據您網頁上的「視覺空間」,而具有'display:none'的元素則不會。這種情況似乎並不重要。在IE中對'display:inline-block'的要求似乎是'visibility:hidden'內部的'visibility:visible'嵌套的怪癖。 – thirtydot 2011-04-05 22:41:55

+0

啊,我明白了,謝謝。 – ash 2011-04-06 00:44:32

1

你不能,因爲#bar1是#foo的孩子。如果你想隱藏foo的文本,那麼#bar1也會被隱藏。

+0

但是,如果中間的「隱藏我」位於「」或其他元素的內部,這可以解決。 – 2011-04-05 22:23:12

+0

很高興知道這是不可能的。我正在處理注入的HTML,並正在尋找一個非JS解決方案。 – ash 2011-04-05 22:35:58

0

鑑於這種結構,你真的不能這樣做,因爲沒有隱藏容器div就沒有辦法標記「隱藏我」文本。你真的不得不沿着線的東西:

<div id="foo"> 
    <a id="bar1">show me<a> 
    <span>hide me</span> 
    <a id="bar2">hide me too</a> 
    </div> 
0

您不能成功級聯隱藏除特定的子元素的容器中的所有內容的樣式。

爲了使用類似div#foo:not(#bar1) { display: none; }的東西,您需要在<span />或類似內容中包含「隱藏我」一詞,但即使在那裏,我也不確定您需要支持哪些瀏覽器。

編輯 其實,在第二個想法,你可能會離開,不包裝在span標記文本,如果你可以使用:not()僞類脫身。

2

還有我發現,讓這兩種方法,第一個:

#foo { 
    font-size: 0; 
} 

#bar1 { 
    font-size: 16px; 
} 

JS Fiddle

而第二個:

#foo { 
    font-size: 0; 
} 

#foo :first-child { 
    font-size: 16px; 
} 

JS Fiddle

這些方法幾乎適用於font尺寸爲0,因此它不佔用高度或寬度。然後覆蓋特定元素上的font-size,以顯示指定標籤的文本。這個問題和我不喜歡的原因是,它明確需要固定大小的字體(示例中的16px)來覆蓋0的繼承font-size。儘管如此,後者的例子可能有點過於脆弱,不能被動態生成的標記信任。

+0

+1 *一個鬼鬼祟祟的想法*。我確信某些瀏覽器(可能是IE的舊版本:不確定)會以某種方式顯示具有'font-size:0'的文本。 – thirtydot 2011-04-06 00:41:40

+0

_Sneaky_確實! – ash 2011-04-06 00:44:07

+0

@thirtydot,非常感謝你=) – 2011-04-06 09:11:59