贝利信息

html5滤镜怎样做渐变遮罩_html5渐变遮罩滤镜教程【步骤】

日期:2026-01-25 00:00 / 作者:看不見的法師
HTML5无原生渐变遮罩,需用canvas(createLinearGradi

ent+globalCompositeOperation='destination-in')或SVG(+)实现;CSS mask-image支持有限,filter/backdrop-filter不具遮罩能力。

HTML5 本身没有“渐变遮罩滤镜”这个内置功能,所谓“HTML5 滤镜做渐变遮罩”,实际是靠 canvascreateLinearGradientcreateRadialGradient 配合 globalCompositeOperation 实现的遮罩效果,或者用 SVG + 嵌入 HTML;CSS 滤镜(如 filter: blur())不支持遮罩逻辑。

canvas 中用渐变+合成模式实现遮罩

核心思路:先画遮罩层(渐变),再画内容图,通过 globalCompositeOperation = 'destination-in' 让内容只保留在渐变区域内。

const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0); // 先画图

ctx.globalCompositeOperation = 'destination-in'; // 关键:设合成模式
const grad = ctx.createLinearGradient(0, 0, canvas.width, 0);
grad.addColorStop(0, 'rgba(255,255,255,1)');
grad.addColorStop(1, 'rgba(255,255,255,0)');
ctx.fillStyle = grad;
ctx.fillRect(0, 0, canvas.width, canvas.height); // 画渐变遮罩

SVG mask + linearGradient 是更稳定的选择

比起 canvas 手动控制绘图顺序和坐标,SVG 的 天然支持渐变遮罩,兼容性好、响应式友好、代码更声明式。


  
    
      
      
    
    
      
    
  


@@##@@

为什么不用 CSS filter 或 backdrop-filter 做渐变遮罩?

因为它们作用对象不同:filter 是对元素自身渲染结果做后处理(模糊、变色等),backdrop-filter 是对元素背后区域做处理,二者都不具备“按透明度裁剪显示区域”的能力。

真正落地时,SVG 方案最省心;canvas 方案适合需要逐帧控制或动态生成遮罩的场景;而纯 CSS 的 mask-image 看似简洁,但浏览器支持断层明显,移动端尤其容易失效。别忽略 mask 的默认坐标系和颜色空间——灰度值错一位,整个遮罩就反了。