純css實現淡入淡出


當時的目的是想用純css實現一種鼠標hover A節點的時候B淡入,移出A的時候B淡出的功能,希望B在不顯示的時候不會占位且無事件(通常用display:none實現),於是就出現了困難。

以下是dom結構

<div id="container"></div>
<div id="detail"></div>

 

transition不支持display屬性的改變,而瀏覽器會將節點屬性的變化同display一起顯示,從而導致動畫效果的失效

#container{width:100px;
height:100px;
background-color: red;
display:block;

}
#container + #detail{
width:10px;
height:10px;
position:absolute;
background-color:#666;
top:15px;
left:15px;
opacity:0;
transition:all 0.4s;
display: none;
}
#container:hover + #detail,#detail:hover{
opacity:1;
display: block;
}

淡入完成了,淡出卻不行,這是因為detail節點不占位了

#container{width:100px;
height:100px;
background-color: red;
display:block;

}
#container + #detail{
width:10px;
height:10px;
position:absolute;
background-color:#666;
top:15px;
left:15px;
opacity:0;
-webkit-animation:hide 0.4s ease-out;
display: none;
}
#container:hover + #detail,#detail:hover{
opacity:1;
display: block;
-webkit-animation:show 0.4s ease-in;
transition-delay: 0s;
}
@-webkit-keyframes show /* Safari 和 Chrome */
{
0% {opacity:0;}
100% {opacity:1;}
}
@-webkit-keyframes hide /* Safari 和 Chrome */
{
0% {opacity:1;}
100% {opacity:0;}
}

最終實現代碼(只寫了chrome下的)

#container{width:100px;
height:100px;
background-color: red;
display:block;

}
#detail{
width:10px;
height:0px;
position:absolute;
background-color:#666;
top:15px;
left:15px;
opacity:0;
-webkit-animation:hide 0.4s ease-out;
display: block;
transition:height 1ms;
transition-delay: 0.4s;
overflow:hidden;
}
#container:hover + #detail{
height:10px;
opacity:1;
display: block;
-webkit-animation:show 0.4s ease-in;
transition-delay: 0s;
}
#detail:hover{
height:10px;
opacity:1;
display: block;
-webkit-animation:show 0.4s ease-in;
transition-delay: 0s;
}
@-webkit-keyframes show 
{
0% {opacity:0;}
100% {opacity:1;}
}
@-webkit-keyframes hide 
{
0% {opacity:1;}
100% {opacity:0;}
}

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM