网页设计中,元素的出现和消失如果太生硬,用户体验会打折扣。比如一个提示框突然蹦出来,或者图片切换没有过渡,看起来就很突兀。这时候用CSS实现渐显渐隐效果,能让页面更自然流畅。
使用 opacity 和 transition 实现简单淡入淡出
最常用的方法是结合 opacity 属性和 transition 过渡效果。比如让一个盒子在鼠标移入时慢慢变透明,移出时恢复。
<div class="fade-box">悬停我试试</div>
.fade-box {
width: 200px;
height: 100px;
background-color: #007bff;
color: white;
text-align: center;
line-height: 100px;
transition: opacity 0.5s ease;
}
.fade-box:hover {
opacity: 0.3;
}
这样鼠标放上去,盒子会缓慢变透明,拿开又慢慢恢复。整个过程柔和,不刺眼。
用 @keyframes 制作自定义动画
如果想让元素自己动起来,比如页面加载时自动淡入,就可以用 @keyframes 定义关键帧动画。
<div class="fade-in">欢迎回来!</div>
.fade-in {
opacity: 0;
animation: fadeIn 1.5s ease forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
这个例子中,元素一开始不可见(opacity为0),然后在1.5秒内逐渐显示。常用于首页标题、弹窗内容等需要“缓缓出现”的场景。
反向操作:实现淡出隐藏
如果要让元素慢慢消失,可以反过来设置动画方向。比如点击关闭按钮后,提示条缓缓淡出。
.fade-out {
animation: fadeOut 1s ease forwards;
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
配合JavaScript,在特定事件触发后添加 fade-out 类,就能实现点击后渐隐消失的效果。
注意 display 和 visibility 的区别
只改 opacity 不会影响布局,元素虽然看不见,但还占着位置。如果希望彻底“腾出空间”,可以配合 visibility 或在动画结束后用JS修改 display: none。
.fade-out-remove {
opacity: 0;
visibility: hidden;
transition: opacity 0.6s, visibility 0.6s;
}
这样在透明的同时也会隐藏占位,适合菜单收起、广告条关闭等场景。