问题描述
我试图在 div class="container" 悬停时创建一个效果,从底部的另一个 div 会发生平滑的上过渡。只有在悬停期间,才会发生这种情况,因为我希望隐藏 .bottom div。当那个 div 没有隐藏时,我可以看到我想要的效果。但是当我隐藏底部 div 时,无法看到悬停效果平滑过渡效果。检查此代码一次。
HTML CODE
<div class="Box">
Hello
<div class="bottom">
Everyone
</div>
</div>
CSS code
.Box{
border: 1px solid black;
display: inline-block;
border-radius: 3px;
padding: 8px;
font-size: 20px;
}
.bottom {
background: pink;
width: 80px;
text-align: center;
position: absolute;
top:80px;
left:0;
/* display: none; */
}
.Box:hover .bottom {
display: block;
transition: linear 0.2s;
top:55px;
}
这是codepen链接 https://codepen.io/Biebk/pen/MWpREqb
解决方法
使用以下代码。
.box {
border: 1px solid black;
display: inline-block;
border-radius: 3px;
padding: 8px;
font-size: 20px;
}
.hovered{
transition: all .2s;
}
.bottom {
background: pink;
width: 80px;
text-align: center;
position: absolute;
top: 80px;
left: 0;
visibility: hidden;
}
.hovered:hover+.bottom {
transition: all .2s;
top: 55px;
visibility: visible;
}
<div class="box">
<div class="hovered">Hello</div>
<div class="bottom">
Everyone
</div>
</div>
首先,您可以将其 display: none
设置为 opacity
,而不是 0
来完全隐藏传入元素,然后当父元素悬停时,将其设置为 {{1 }},像这样:
1
我想,鉴于您想要在悬停时传入“上拉”效果,您希望该元素在悬停结束时也“下拉”。您可以通过在父元素上使用 .bottom {
opacity: 0;
}
.box:hover .bottom {
opacity: 1;
}
来反转相同的效果:
:not(:hover)
另外,一定要在非悬停状态设置 .box:not(:hover) .bottom {
opacity: 0;
}
。以下示例提供了您正在寻找的平滑过渡:
transition
.box {
border: 1px solid black;
display: inline-block;
border-radius: 3px;
padding: 8px;
font-size: 20px;
}
.bottom {
background: pink;
width: 80px;
text-align: center;
position: absolute;
left: 0;
transition: all .25s ease;
}
.box:not(:hover) .bottom {
top: 80px;
opacity: 0;
}
.box:hover .bottom {
top: 55px;
opacity: 1;
}
第二种方法是将 <div class="box">
Hello
<div class="bottom">
Everyone
</div>
</div>
div 作为 bottom
的兄弟,并使用 adjacent sibling combinator 来应用悬停效果:
box
.box {
border: 1px solid black;
display: inline-block;
border-radius: 3px;
padding: 8px;
font-size: 20px;
}
.bottom {
font-size: 20px;
background: pink;
width: 80px;
text-align: center;
position: absolute;
left: 0;
top: 80px;
opacity: 0;
cursor: default;
transition: all .25s ease;
}
.box:hover + .bottom {
top: 55px;
opacity: 1;
}
使用opacity属性而不是display来达到想要的效果,然后 使用以下代码
.box {
border: 1px solid black;
display: inline-block;
border-radius: 3px;
padding: 8px;
font-size: 20px;
}
.bottom {
background: pink;
width: 80px;
text-align: center;
position: absolute;
top: 80px;
left: 0;
opacity: 0;
}
.box:hover .bottom{
opacity: 1;
transition: opacity 0.2s,top 1s;
top: 55px;
}