【发布时间】:2021-10-17 00:15:45
【问题描述】:
我遇到了一个问题,似乎阻止 CSS 过渡在同时从 display:none 更改的元素上播放。
在以下示例中,div 具有相同的 CSS,只是将鼠标悬停在第一个上会隐藏其他两个。第二个div用visibility:hidden隐藏,第三个用display:none隐藏。
当您将鼠标悬停在第一个 div 上时,行为与预期一致:第一个 div 转换和其他两个被隐藏。当您将鼠标移开时,行为与我的预期不同:第一个 div 转换回正常状态,第二个 div 未隐藏然后转换回正常状态,但第三个 div 未隐藏并仍处于正常状态。
我期待第三个 div 与第二个 div 的行为相匹配,并且也被取消隐藏,然后恢复正常。
div{
width:100px;
height:50px;
background:red;
border-radius:50%;
transition: border-radius 1s;
}
#hover:hover, #hover:hover ~ div{
border-radius:0%;
}
#hover:hover ~ #hide1{
visibility:hidden;
}
#hover:hover ~ #hide2{
display:none;
}
<div id="hover">hover me for transition</div>
<div id="hide1">I transition back</div>
<div id="hide2">but I don't</div>
由于第二个 div 按预期工作,使用 visibility:hidden 和一些定位 CSS 很容易提出替代解决方案,但是否可以使用 display:none 仅在 CSS 中完成此操作?如果不是,为什么display:none 会以这种方式影响其他转换?
注意:这似乎很容易找到,但我的搜索只发现了有关尝试转换 display 属性本身的问题,而不是它对其他转换的副作用。
【问题讨论】:
-
您不能在显示属性上应用过渡。为此,您可以使用 jQuery fadeIn/fadeOut。
-
@rmarif 我不想转换
display属性。
标签: css