2011-04-05 78 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