[特殊字符] CSS 图片变黑变暗的 3 种方案,总有一款适合你!
最近在做项目的时候遇到一个很常见的需求如何让图片颜色更黑一点或者加一层黑色透明度遮罩很多人第一反应是用filter: brightness(0%)但其实这个方法有不少坑。今天就来聊聊3 种靠谱的 CSS 方案从简单到高级看完你就知道该选哪个了 为什么需要让图片变暗在实际开发中这种需求非常常见场景需求️ 图片上放白色文字图片太亮看不清字需要压暗背景 暗色主题网站整体风格偏暗图片需要配合 悬停效果hover 时图片变暗突出交互感 海报/Banner叠加黑色渐变营造氛围感 方案一使用filter最简单一行代码搞定这是最直接的方式不需要改动 HTML 结构直接在img标签上加样式就行。img{filter:brightness(0.7);} 参数说明参数含义效果brightness(1)原始亮度不变brightness(0.7)70% 亮度变暗 30% ✅brightness(0.5)50% 亮度变暗 50%brightness(0)0% 亮度纯黑 ⚫brightness(1.5)150% 亮度变亮 50% ☀️ 进阶组合使用效果更好img{filter:brightness(0.7)contrast(1.1)saturate(0.9);}滤镜作用brightness(0.7)降低亮度contrast(1.1)提升对比度让暗部更暗saturate(0.9)稍微降低饱和度避免颜色过艳✅ 优点✅ 代码最少一行搞定✅ 不需要改 HTML 结构✅ 性能好GPU 加速❌ 缺点❌ 会影响整个图片包括白色区域也会变灰❌ 无法精确控制只让透明区域变黑❌ 不够灵活想调整透明度比较麻烦 方案二伪元素叠加黑色半透明层⭐ 最推荐这是我最推荐的方案通过::after伪元素叠加一层黑色半透明遮罩精确控制、不影响原图、灵活度最高。 HTML 结构divclassimg-wrapperimgsrcphoto.jpgalt/div CSS 样式.img-wrapper{position:relative;display:inline-block;}.img-wrapper::after{content:;position:absolute;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.3);/* 黑色 30% 透明度 */pointer-events:none;/* 关键不影响图片点击事件 */} 参数调节指南透明度效果适用场景rgba(0,0,0,0.1)微微变暗 轻微压暗保留细节rgba(0,0,0,0.3)明显变暗 文字叠加最常用 ✅rgba(0,0,0,0.5)大幅变暗 悬停效果rgba(0,0,0,0.8)接近全黑 强烈氛围感✅ 优点✅精确控制透明度想要多少暗就多少暗✅不影响原图随时可以去掉✅pointer-events: none保证不影响点击交互✅ 兼容所有浏览器没有兼容性问题❌ 缺点❌ 需要在img外面包一层div❌ 代码比filter多几行 方案三混合模式效果最自然 ✨如果你追求最自然的变暗效果可以试试mix-blend-mode混合模式。 CSS 样式.img-wrapper{position:relative;display:inline-block;}.img-wrapper::after{content:;position:absolute;top:0;left:0;width:100%;height:100%;background:black;mix-blend-mode:multiply;/* 正片叠底模式 */opacity:0.3;/* 30% 透明度 */pointer-events:none;} 常见混合模式对比混合模式效果推荐度multiply正片叠底✅ 变暗保留细节最自然⭐⭐⭐⭐⭐screen滤色变亮反过来用⭐⭐⭐overlay叠加同时变亮和变暗⭐⭐⭐⭐darken变暗只取暗色部分⭐⭐⭐✅ 优点✅ 效果最自然像专业 PS 调过一样✅ 亮的地方不变只有暗的地方更暗✅ 视觉上比filter更高级❌ 缺点❌ 兼容性稍差IE 不支持❌ 不如方案二直观好理解 三种方案终极对比对比项方案1filter方案2伪元素叠加 ⭐方案3混合模式代码量⭐ 最少⭐⭐ 中等⭐⭐ 中等灵活度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐效果自然度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐浏览器兼容⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐是否需要改HTML❌ 不需要✅ 需要包一层div✅ 需要包一层div推荐场景快速 demo生产环境首选✅追求极致效果 最终推荐你的需求推荐方案快速实现不想改结构 方案1filter生产环境追求稳定方案2 伪元素叠加⭐追求极致视觉效果 方案3 混合模式我的建议日常开发直接用方案2代码不多效果可控兼容性完美是最稳妥的选择。 写在最后看似一个简单的图片变暗需求其实藏着不少细节。选对方法不仅能让效果更好还能让代码更易维护。你平时用哪种方案欢迎在评论区交流如果觉得有用记得 ⭐ 收藏 点赞下次找起来不迷路