使用filter: grayscale(100%)可直接实现图片黑白效果,现代浏览器普遍支持;需配合transition实现平滑过渡,注意IE不支持、移动端性能及Tailwind默认仅提供0%和100%两档。

grayscale 类直接让图片变黑白
默认的 grayscale 类会把图片完全转成灰度(100%),等价于 CSS 的 filter: grayscale(1)。它不依赖 hover,加在 标签上立刻生效:
@@##@@
注意:这个效果是“全开”状态,没有中间档位;Tailwind 默认只提供 grayscale(100%)和 grayscale-0(0%,即无滤镜)两个开关,不内置 25%/50%/75% 等渐进值。
hover:grayscale-0 是悬停时「取消」黑白效果
很多人误以为 hover:grayscale-0 是“悬停时加黑白”,其实正相反——它表示「鼠标移入时,把原本的 grayscale 滤镜关掉」。所以必须和基础 grayscale 配合使用才有效:
@@##@@
常见错误是只写 hover:grayscale-0,结果悬停没变化,因为初始状态根本没应用滤镜。
- 初始状态:
grayscale→ 图片黑白 - 悬停时:
hover:grayscale-0覆盖掉 grayscale → 图片恢复彩色 - 离开后:自动回退到初始的
grayscale状态
自定义 grayscale 百分比需手动配置
Tailwind 默认不支持 grayscale-50 这类中间值。如果需要 30%、60% 灰度,得在 tailwind.config.js 里扩展 theme.filter:
module.exports = {
theme: {
extend: {
filter: {
'grayscale-30': 'grayscale(0.3)',
'grayscale-60': 'grayscale(0.6)',
}
}
}
}
然后才能用 grayscale-30 或 hover:grayscale-60。不配就无效,不会报错,但样式不出现。
- 务必运行
npm run build(或对应构建命令)让配置生效 - 注意:Tailwind v3.0+ 才原生支持
filter扩展;v2 需配合插件 - 百分比值写小数(如
0.3),别写30%,否则 CSS 解析失败
性能与兼容性要注意这三点
filter 在低端 Android 或旧版 Safari 上可能触发重绘卡顿,尤其多图滚动时:
- 避免对
或多个同时加
hover:grayscale-0,容易引发 layout thrashing - IE 完全不支持
filter,grayscale类会被忽略(可加filter: gray降级,但仅 IE 支持且效果不同) - 如果图片本身带 alpha 通道(如 PNG 透明背景),
grayscale不影响透明度,但某些显卡驱动下可能出现轻微色偏
真正要控制精细灰度或做动画过渡,用 transition-all duration-300 加在元素上,否则 hover 切换是瞬时跳变。

前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











