【问题标题】:How to set a transition for when mouse leaves an element (hover off)?如何为鼠标离开元素(悬停)设置过渡?
【发布时间】:2017-08-07 19:54:25
【问题描述】:
我有多种产品形式,它们将悬停时的图像更改为另一个图像。悬停时,过渡很平滑,ease-in-out 需要 0.3 秒。然而,当鼠标离开元素时,过渡是突然的,并且会立即改变。如何在鼠标离开时也进行过渡?
CSS:
.my-reveal .hidden {
display: block !important;
visibility: visible !important;
}
.product:hover .reveal img {
opacity: 1;
}
.my-reveal {
position: relative;
}
.my-reveal .hidden {
position: absolute;
z-index: -1;
top: 0;
width: 100%;
height: 100%;
opacity: 0;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.my-reveal:hover .hidden {
z-index: 2;
opacity: 1;
}
<div class="my-reveal">
<img src="" alt="skirt">
<img src="" alt="skirt">
</div>
【问题讨论】:
标签:
html
css
css-transitions
【解决方案1】:
使用当前布局,您需要做的就是转换隐藏元素的不透明度,然后将其转入和转出。
.my-reveal {
position: relative;
}
.hidden {
opacity: 0;
position: absolute;
top: 0; left: 0;
transition: opacity 0.3s ease-in-out;
}
.my-reveal:hover .hidden {
opacity: 1;
}
<div class="my-reveal">
<img src="" alt="Bootiful Skirt">
<img class="hidden" src="" alt="Bootiful Skirt">
</div>
【解决方案2】:
您应该在可见图像中添加一个“显示”类,然后添加这段 CSS:
.my-reveal .shown {
z-index: 2;
opacity: 1;
-webkit-transition: opacity 0.3s ease-in-out;
-moz-transition: opacity 0.3s ease-in-out;
-o-transition: opacity 0.3s ease-in-out;
transition: opacity 0.3s ease-in-out;
}
.my-reveal:hover .shown {
z-index: -1;
opacity: 0.3;
}
这将使您的可见图像具有不透明度为 1 的非悬停状态和具有缓入平滑动画的悬停状态。
【解决方案3】:
将transition 添加到z-index 属性。在默认状态下,将其延迟设置为等于opacity 转换的持续时间,在:hover 状态下,将该延迟重置为0。
div{
position:relative;
}
div>img:first-child{
position:relative;
z-index:2;
}
div>img:last-child{
left:0;
opacity:0;
position:absolute;
top:0;
transition:opacity .3s ease-in-out,z-index 0s linear .3s;
z-index:1;
}
div:hover>img:last-child{
opacity:1;
transition-delay:0s;
z-index:3;
}
<div>
<img src="" alt="skirt">
<img src="" alt="skirt">
</div>