HTML5视频可通过SVG clipPath配合CSS clip-path实现异形遮罩,兼容Chrome/Firefox/Safari/Edge 104+;需内联SVG定义路径并设置clip-path: url(#mask),或用foreignObject嵌入视频以支持SVG动画联动,注意移动端性能与旧版WebView降级方案。
HTML5视频本身不支持直接用SVG路径做异形遮罩,但通过clipPath配合<video>的CSS渲染层叠,可以稳定实现非矩形区域的视频播放效果。关键在于让视频成为SVG的<foreignObject>子内容,或利用CSS clip-path引用SVG定义的裁剪路径。
clipPath + CSS clip-path 实现兼容方案这是目前最实用、浏览器支持度高(Chrome/Firefox/Safari/Edge 104+)的方式,无需复杂Canvas合成。
<clipPath id="mask"><path d="M..."/></clipPath>,路径可任意复杂(星形、波浪、手绘轮廓等)<video>元素添加CSS:clip-path: url(#mask);
overflow: hidden,避免裁剪外溢clipPath 的URL引用需同源,建议将SVG内联在HTML顶部或使用外部SVG文件并确保CORS<foreignObject>把视频嵌入SVG内部(适合动画联动)当需要视频随SVG图形缩放、旋转、响应式变形,或与SVG滤镜/动画同步时,此方式更灵活。
<foreignObject width="640" height="360"><video src="..." /></foreignObject>
video { width: 100%; height: 100%; border: none; }
<foreignObject>应用transform、filter或绑定SMIL/JS动画foreignObject中的<video>,需降级为CSS clip-path方案通过JS实时修改<path>的d属性,可实现交互式异形播放效果。
立即学习“前端免费学习笔记(深入)”;
document.getElementById('maskPath').setAttribute('d', newPath)更新路径requestAnimationFrame控制更新频率,避免卡顿异形遮罩会增加GPU合成负担,尤其在移动设备上需谨慎优化。
clipPath中使用超多锚点的路径(建议控制在200个点以内),否则渲染帧率下降明显clip-path 引用SVG,可用-webkit-mask + PNG遮罩图降级playsinline和webkit-playsinline,防止iOS全屏劫持破坏遮罩布局will-change: clip-path是否触发硬件加速,必要时加transform: translateZ(0)强制图层提升