如何在堆叠图层中挖洞,复现黄色按钮下方带透明孔洞的UI效果
实现方案
方案1:CSS mask 遮罩(推荐,适配绝大多数场景)
原理是给毛玻璃层添加遮罩,把需要做孔洞的位置设为完全透明,无需额外切图,用CSS渐变即可生成遮罩:
.glass-panel { /* 你的原有毛玻璃样式 */ background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); /* 核心挖洞代码 */ mask: radial-gradient(circle 20px at 90px 45px, transparent 100%, #000 100%); -webkit-mask: radial-gradient(circle 20px at 90px 45px, transparent 100%, #000 100%); }
参数说明:
circle 20px是孔洞的半径,根据你的按钮尺寸调整即可at 90px 45px是孔洞在毛玻璃层内的坐标,对应黄色按钮的位置- 需要多个孔洞时,用逗号分隔多个
radial-gradient参数即可
方案2:伪元素模拟(兼容低版本浏览器)
适合页面背景固定、没有动态变化的场景,不需要用到mask属性,兼容性更好:
.glass-panel { position: relative; /* 你的原有毛玻璃样式 */ background: rgba(255, 255, 255, 0.15); backdrop-filter: blur(16px); -webkit-backdrop-filter: blur(16px); } .glass-panel::before { content: ""; position: absolute; /* 对应孔洞的位置和尺寸 */ left: 70px; top: 25px; width: 40px; height: 40px; border-radius: 50%; /* 背景设置和页面底层背景完全一致 */ background: inherit; /* 移除毛玻璃效果,模拟透过去的视觉 */ backdrop-filter: none; -webkit-backdrop-filter: none; }
注意事项
- 如果按钮位置是动态的,可以用JS实时更新mask的坐标参数,或者伪元素的left/top值
- 移动端需要注意带上
-webkit-mask前缀,目前主流浏览器都已经支持mask属性 - 如果孔洞是非圆形的异形,可以把mask的渐变替换为自定义的SVG路径
内容的提问来源于stack exchange,提问作者Deepak Lohmod
相关产品推荐
相关产品推荐

