<div id="foo">
<a id="bar1">show me</a>
hide me
<a id="bar2">hide me too</a>
</div>
如何使用CSS(display:none;
)只具有第一a
元素可见?隐藏在CSS无标签元素
<div id="foo">
<a id="bar1">show me</a>
hide me
<a id="bar2">hide me too</a>
</div>
如何使用CSS(display:none;
)只具有第一a
元素可见?隐藏在CSS无标签元素
#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
}
你不能,因为#bar1是#foo的孩子。如果你想隐藏foo的文本,那么#bar1也会被隐藏。
但是,如果中间的“隐藏我”位于“”或其他元素的内部,这可以解决。 – 2011-04-05 22:23:12
很高兴知道这是不可能的。我正在处理注入的HTML,并正在寻找一个非JS解决方案。 – ash 2011-04-05 22:35:58
鉴于这种结构,你真的不能这样做,因为没有隐藏容器div就没有办法标记“隐藏我”文本。你真的不得不沿着线的东西:
<div id="foo">
<a id="bar1">show me<a>
<span>hide me</span>
<a id="bar2">hide me too</a>
</div>
您不能成功级联隐藏除特定的子元素的容器中的所有内容的样式。
为了使用类似div#foo:not(#bar1) { display: none; }
的东西,您需要在<span />
或类似内容中包含“隐藏我”一词,但即使在那里,我也不确定您需要支持哪些浏览器。
编辑 其实,在第二个想法,你可能会离开,不包装在span标记文本,如果你可以使用:not()
伪类脱身。
还有我发现,让这两种方法,第一个:
#foo {
font-size: 0;
}
#bar1 {
font-size: 16px;
}
而第二个:
#foo {
font-size: 0;
}
#foo :first-child {
font-size: 16px;
}
这些方法几乎适用于font
尺寸为0
,因此它不占用高度或宽度。然后覆盖特定元素上的font-size
,以显示指定标签的文本。这个问题和我不喜欢的原因是,它明确需要固定大小的字体(示例中的16px
)来覆盖0
的继承font-size
。尽管如此,后者的例子可能有点过于脆弱,不能被动态生成的标记信任。
'能见度'技巧的作品!缺点是跨浏览器问题? – ash 2011-04-05 22:39:15
这不是我想到的。我的意思是,具有'visibility:hidden'的元素仍然会占据您网页上的“视觉空间”,而具有'display:none'的元素则不会。这种情况似乎并不重要。在IE中对'display:inline-block'的要求似乎是'visibility:hidden'内部的'visibility:visible'嵌套的怪癖。 – thirtydot 2011-04-05 22:41:55
啊,我明白了,谢谢。 – ash 2011-04-06 00:44:32