图片灰度悬停变色特效(grayscale 滤镜 4 种玩法 CSS 源码)
图片灰度悬停变色 4 种玩法:灰度转彩色、彩色转灰度、灰度加缩放、复古 sepia 过渡,纯 CSS filter 实现,适合头像墙、作品集、品牌阵列。
效果演示(真实可交互)
把鼠标移到任意一张卡片上,体验灰度 ↔ 彩色之间的平滑过渡。示例用渐变占位图演示,实际项目中把 .gs-img 里的内容换成 <img> 即可。
完整代码
HTML 结构:每张卡片是一个 figure,内部 .gs-img 是图片容器(项目中替换为真实 <img> 标签):
<figure class="gs-card">
<div class="gs-img gs-to-color"><span>🌅</span></div>
<figcaption>① 灰度 → 彩色</figcaption>
</figure>
<!-- 换用 gs-to-gray / gs-zoom / gs-sepia 切换玩法 -->
核心 CSS:
.gs-img {
aspect-ratio: 4 / 3;
border-radius: 12px;
overflow: hidden;
transition: transform .45s cubic-bezier(.22, .61, .36, 1),
filter .45s ease, box-shadow .45s ease;
will-change: transform, filter;
}
/* ① 默认灰度,悬停恢复彩色 */
.gs-to-color { filter: grayscale(1); }
.gs-card:hover .gs-to-color { filter: grayscale(0); }
/* ② 默认彩色,悬停变灰度 */
.gs-card:hover .gs-to-gray { filter: grayscale(1); }
/* ③ 灰度 + 悬停放大,层次更丰富 */
.gs-to-zoom { filter: grayscale(1); }
.gs-card:hover .gs-to-zoom {
filter: grayscale(0);
transform: scale(1.08);
box-shadow: 0 14px 30px rgba(0, 0, 0, .18);
}
/* ④ 复古 sepia → 悬停彩色 */
.gs-sepia { filter: sepia(.6) saturate(1.1); }
.gs-card:hover .gs-sepia { filter: sepia(0) saturate(1); }
参数说明
| 参数 | 默认值 | 说明 |
|---|---|---|
grayscale() 灰度值 | 1 | 灰度强度,0 为全彩,0.5 为半灰度 |
sepia() 复古值 | .6 | 棕褐色调浓度,配合 saturate() 调整饱和度 |
scale() 放大倍率 | 1.08 | 悬停时的图片放大倍数 |
| 过渡时长 | .45s | transition 时长,习惯干脆的交互可改 .25s |
| 缓动函数 | cubic-bezier(.22,.61,.36,1) | 先快后慢的标准缓动,也可用 ease-out |
兼容性与性能
- 纯 CSS 实现,无 JS 依赖,Chrome / Firefox / Safari / Edge 现代版本全部支持
filter与transform均由 GPU 参与合成,多张图同时动画时性能良好- 注意
aspect-ratio需要 Chrome 88+ / Safari 15+,老项目可用padding-top百分比技巧代替 - 列表页同时悬停多张图时,
filter动画在低端设备可能掉帧,可去掉box-shadow动画减负
常见问题
Q: 项目里是真实图片,怎么替换占位图? 把 .gs-img 内部换成 <img src="...">,并设置 width: 100%; height: 100%; object-fit: cover;,滤镜直接作用在图片上即可,CSS 完全不用改。
Q: 移动端没有 hover,灰度效果会怎样? 触屏上首次点击会触发 hover 态让图片恢复彩色,再次点击离开。如果希望默认全彩、点击才变灰,可以给 .gs-img 加 @media (hover: none) 规则关闭灰度。
Q: 为什么我的图片悬停时过渡很生硬? 检查 filter 是否写在 transition 属性列表中,transition: filter .45s ease 不能省略,否则状态切换是瞬变的。
Q: 可以商用吗? 可以,本组件为粤喵自研原创,免费商用无需署名,欢迎按需修改配色与时长。
许可与来源
- 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
- 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
- 首次发布:2026-09-01 · 最近更新:2026-09-01
- 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
- 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理
常见问题
这个组件可以商用吗?
可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。
浏览器兼容性如何?
支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。
怎么修改动画参数?
直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。