You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在-webkit-mask中用radial-gradient为Div创建3个透明孔洞

解决Div边框添加第三个随机透明孔洞的问题

直接通过**逗号分隔多个radial-gradient**就能在-webkit-mask/标准mask中添加第三个孔洞,核心是利用CSS渐变的叠加特性,每个渐变对应一个独立的透明区域。

静态实现代码示例

<div class="border-box"></div>
.border-box {
  width: 320px;
  height: 240px;
  border: 5px solid #2d3748;
  background-color: #f7fafc; /* 背景色方便观察孔洞效果 */
  
  /* 三个随机位置的透明孔洞 */
  -webkit-mask: 
    radial-gradient(circle at 15% 25%, transparent 20px, black 20px),
    radial-gradient(circle at 65% 75%, transparent 20px, black 20px),
    radial-gradient(circle at 85% 35%, transparent 20px, black 20px);
  mask: 
    radial-gradient(circle at 15% 25%, transparent 20px, black 20px),
    radial-gradient(circle at 65% 75%, transparent 20px, black 20px),
    radial-gradient(circle at 85% 35%, transparent 20px, black 20px);
}

动态随机位置实现

如果需要每次加载都生成随机分布的孔洞,用JS动态生成渐变规则即可:

const box = document.querySelector('.border-box');
const holeCount = 3;
const holeSize = '20px';

// 生成随机位置的渐变数组
const holeGradients = Array.from({ length: holeCount }, () => {
  const x = `${Math.floor(Math.random() * 100)}%`;
  const y = `${Math.floor(Math.random() * 100)}%`;
  return `radial-gradient(circle at ${x} ${y}, transparent ${holeSize}, black ${holeSize})`;
});

// 赋值给mask属性
box.style.webkitMask = holeGradients.join(',');
box.style.mask = holeGradients.join(',');

原理说明

  • mask/-webkit-mask允许同时使用多个渐变,用逗号分隔即可叠加效果;
  • 每个radial-gradient中,transparent 20px定义了透明的孔洞范围,black 20px定义了元素保留显示的区域;
  • 多个渐变叠加后,所有透明区域都会挖空对应位置的边框和元素内容,实现孔洞效果。

内容的提问来源于stack exchange,提问作者Ricardo Pagano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:42:18