如何实现带平滑过渡悬停动画的心形点赞按钮?
复刻心形点赞按钮(带悬停过渡动画)
方案一:纯CSS绘制心形(推荐,过渡更丝滑)
无需依赖图标库,纯CSS实现可完美解决背景色留边框的问题,过渡效果自然:
<button class="like-btn"></button>
.like-btn { width: 40px; height: 40px; border: none; background: transparent; cursor: pointer; position: relative; } /* 绘制空心心形框架 */ .like-btn::before, .like-btn::after { content: ''; position: absolute; top: 10px; width: 20px; height: 32px; border: 2px solid #ccc; border-radius: 20px 20px 0 0; transition: all 0.3s ease; } .like-btn::before { left: 20px; transform: rotate(-45deg); border-left: none; border-bottom: none; } .like-btn::after { left: 0; transform: rotate(45deg); border-right: none; border-bottom: none; } /* 悬停时切换为实心红色心形 */ .like-btn:hover::before, .like-btn:hover::after { border-color: #e74c3c; background-color: #e74c3c; }
方案二:改进Font Awesome实现(适配图标库需求)
如果必须用Font Awesome,通过叠加空心/实心两个图标,利用透明度过渡避免边框残留:
<button class="like-btn"> <i class="fa-regular fa-heart empty-heart"></i> <i class="fa-solid fa-heart filled-heart"></i> </button>
.like-btn { border: none; background: transparent; cursor: pointer; position: relative; font-size: 2rem; } .empty-heart, .filled-heart { position: absolute; top: 0; left: 0; transition: opacity 0.3s ease; } .empty-heart { color: #ccc; opacity: 1; } .filled-heart { color: #e74c3c; opacity: 0; } .like-btn:hover .empty-heart { opacity: 0; } .like-btn:hover .filled-heart { opacity: 1; }
效果说明
两种方案均实现:
- 初始状态:灰色空心心形
- 悬停状态:红色实心心形,0.3秒平滑过渡,无边框残留问题
内容的提问来源于stack exchange,提问作者8bitmd
相关产品推荐
相关产品推荐

