更改css中的可见性属性?

Posted

技术标签:

【中文标题】更改css中的可见性属性?【英文标题】:Changing visibility property in css? 【发布时间】:2011-12-27 01:12:42 【问题描述】:
<style>
#count2
visibility:hidden;

#count1:hover
background:#123456;
//how do I change the visibility property of #count2 here?

</style>
<div id="count1">My visible element</div>
<div id="count2">My flickering element</div>

我的问题很清楚,但可能有点奇怪。当有人将鼠标悬停在 #count1 上时,如何仅使用 css 将 #count2 的可见性属性更改为 true。

【问题讨论】:

我不太确定,所以我将其发布为评论。我认为如果没有 javascript,这是不可能的。 当您翻转#count2 时,您希望它显示,而不是隐藏? 您是否有空闲使用兄弟选择器? 不,我想在悬停在 #count1 上时操纵 #count2 的可见性,这在 css 中是否可行,或者我应该使用 jquery? @JennyDcosta - 正如 BoltClock 在他的回答中提到的,在 CSS 中是可能的,但如果您需要支持 IE6,则需要一些 Javascript 帮助。 (当然,JQuery 是一种选择。) 【参考方案1】:

由于您在悬停其中一个时修改了两个不同的元素,因此您可以在单独的规则中使用同级组合器后跟 #count2 选择器来修改该特定元素:

#count2 
    visibility: hidden;


#count1:hover 
    background: #123456;


#count1:hover + #count2 
    visibility: visible;

【讨论】:

如果你不幸不得不支持 IE6,你将不得不使用 jQuery... @JennyDcosta - 你在测试哪个浏览器?这适用于 FFX 3.5、IE7、IE8 和 Chrome……正如 BoltClock 所说,如果您需要 IE6 支持,则需要一些 Javascript 帮助。【参考方案2】:

您必须使用 + 选择器,它选择相邻的兄弟姐妹:

#count2 
    visibility:hidden;

#count1:hover 
    background:#123456;

#count1:hover + #count2 
    visibility: visible;

这是小提琴:http://jsfiddle.net/Yyr64/


如果您必须针对较旧的浏览器,并且您使用的是 jQuery,那么您必须这样做:

var $count2 = $('#count2');

$('#count1').hover(function()
    $count2.css('visibility', 'visible');
, function()
    $count2.css('visibility', 'hidden');
);

...这里的小提琴:http://jsfiddle.net/Yyr64/1/

【讨论】:

@Jenny Dcosta - 当然。您只需要更改选择器。 @Jenny Dcosta:你检查过 Joseph 发布的链接吗?如果他的链接有效,但您的代码无效,您可能需要向我们展示您的确切代码(如果它与您发布的不同)。【参考方案3】:

上面的解决方案可以用下面的jsfiddle抽象出来:http://jsfiddle.net/mousepotatoweb/PVHzK/2/

<style>
[id|="count-1"]
background:#123456;


[id|="count-2"]
visibility:hidden;



[id|="count"]:hover ~ [id|="count"]  visibility: visible;
</style>

<div id="count-1">My visible element</div>
<div id="count-2">My flickering element</div>

【讨论】:

小心 - :nth-of-type() 查看元素类型,而不是属性。将属性选择器与:nth-of-type() 结合使用可能会导致意外结果。 是的,编辑了它 - 使用伪选择器有点疯狂。感谢您的提醒。【参考方案4】:

count2 需要是 count1 的子节点才能仅通过 css 执行此操作。

<div id="count1">
    My visible element
    <div id="count2">My flickering element</div>
</div>

#count1:hover #count2 display: block; background: #ffff00; 
#count2 display: none; 

但在使用 css2 时,您可以使用 + 选择器,如 Joseph Silber 的回答中所示

【讨论】:

【参考方案5】:

使用

 display:none;

而不是可见性属性。

你可以看看jquery http://api.jquery.com/show/

【讨论】:

使用visibility 属性将保留布局的结构。 display: none; 将导致元素填充空间,只要元素设置为无。提问者可能无法使用display: none;

以上是关于更改css中的可见性属性?的主要内容,如果未能解决你的问题,请参考以下文章

如果在 jQuery 中不显示,则更改另一个元素的可见性

绑定到可见性属性时动画不正确(奇数)

深入理解CSS元素可见性visibility

CSS可见性动画不起作用

将 XAML 中的可见性绑定到可见性属性

更改 android studio 中的 textview 可见性