本文详解如何在父容器悬停时,同时触发子元素(图片缩放)与另一子元素(播放图标淡入)的差异化 css 过渡动画,并修复因定位缺失导致的动画失效问题。
本文详解如何在父容器悬停时,同时触发子元素(图片缩放)与另一子元素(播放图标淡入)的差异化 css 过渡动画,并修复因定位缺失导致的动画失效问题。
在构建响应式视频卡片组件时,常需实现「鼠标悬停父容器 → 图片平滑放大 + 播放图标优雅浮现」的双重动效。但实践中,若 .play-icon 缺少完整定位上下文(如 top/left/right/bottom),其 opacity 过渡可能因浏览器渲染层叠逻辑或尺寸计算异常而失效——这正是原始代码中动画“只生效一半”的根本原因。
.item-video-kami { width: 480px; height: 270px; /* 推荐显式设置高度,避免 img 拉伸影响布局 */ overflow: hidden; position: relative; display: inline-block;}.item-video-kami img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s ease, opacity 0.5s ease; /* 显式指定属性,更可靠 */}.item-video-kami .play-icon { position: absolute; top: 0; bottom: 0; left: 0; right: 0; /* 关键:四边归零,确保覆盖 */ display: flex; justify-content: center; align-items: center; background-color: rgba(30, 30, 30, 0.58); opacity: 0; transition: opacity 0.2s ease-in 0.1s; z-index: 1; /* 默认层级,hover 时提升 */}.item-video-kami .play-icon svg { width: 106px; color: rgba(255, 255, 255, 0.31);}.item-video-kami:hover img { transform: scale(1.1);}.item-video-kami:hover .play-icon { opacity: 0.8; z-index: 10; /* 确保悬停时置于最上层 */}
<a href="#" class="item-video-kami"> <div class="play-icon full-height"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <path fill-rule="evenodd" d="M4.5 5.653c0-1.427 1.529-2.33 2.779-1.643l11.54 6.347c1.295.712 1.295 2.573 0 3.286L7.28 19.99c-1.25.687-2.779-.217-2.779-1.643V5.653Z" clip-rule="evenodd" /> </svg> </div> <img src="https://picsum.photos/480/270" alt="Video thumbnail"></a>
通过以上优化,即可实现专业级的双动效协同:图像以缓动曲线放大,播放图标在短暂延迟后柔和浮现,视觉节奏清晰、性能高效、兼容稳健。