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

如何在矩形Div中制作多圆形镂空并保留内部圆形Div显示

解决方案

一、避免内部圆形Div被遮罩的问题

你之前直接给主矩形Div加mask-image,会让整个元素(包括子元素)被统一遮罩,导致内部圆形Div被隐藏。可以用伪元素+层级控制解决,只对主矩形背景做镂空,不影响子元素:

/* 主矩形基础样式 */
.main-rect {
  position: relative;
  /* 保留你原有的背景、尺寸等样式 */
  background: #your-bg-color;
  width: xxxpx;
  height: xxxpx;
}

/* 用伪元素实现镂空,覆盖在主矩形上方 */
.main-rect::after {
  content: '';
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: inherit; /* 继承主矩形背景色 */
  /* 镂空mask效果 */
  -webkit-mask-image: radial-gradient(
    circle at 75% top,
    transparent 30px,
    black 31px
  );
  mask-image: radial-gradient(
    circle at 75% top,
    transparent 30px,
    black 31px
  );
  z-index: 1; /* 伪元素在主矩形内容层上方 */
}

/* 内部圆形Div样式,通过层级显示在伪元素之上 */
.circle-div {
  position: relative;
  z-index: 2;
  /* 保留你原有的圆形样式 */
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background: #your-circle-color;
  margin-top: -30px; /* 你的负margin定位 */
}

这样镂空效果只作用在伪元素上,只会遮挡主矩形背景,内部圆形Div因为层级更高,完全不受影响。

二、在同一个Div上实现多次镂空(复用类)

CSS中重复应用同一个类不会叠加样式,要实现多个镂空,有两种实用方式:

方式1:单个mask-image叠加多个渐变

直接在mask-image里用逗号分隔多个radial-gradient,每个渐变对应一个镂空区域:

.circle-cut-multi {
  -webkit-mask-image: 
    /* 右上角镂空 */
    radial-gradient(circle at 75% top, transparent 30px, black 31px),
    /* 左下角镂空 */
    radial-gradient(circle at 25% bottom, transparent 25px, black 26px),
    /* 可继续添加更多镂空 */
    radial-gradient(circle at 50% 50%, transparent 20px, black 21px);
  mask-image: 
    radial-gradient(circle at 75% top, transparent 30px, black 31px),
    radial-gradient(circle at 25% bottom, transparent 25px, black 26px),
    radial-gradient(circle at 50% 50%, transparent 20px, black 21px);
}

使用时直接给Div加这个类:

<div class="main-rect circle-cut-multi"></div>

方式2:用自定义属性创建通用镂空类

通过CSS变量传递镂空的位置和尺寸,创建一个可复用的通用类,按需修改变量即可:

/* 通用镂空类 */
.circle-cut {
  -webkit-mask-image: 
    radial-gradient(circle at var(--pos1), transparent var(--r1), black calc(var(--r1)+1px)),
    radial-gradient(circle at var(--pos2), transparent var(--r2), black calc(var(--r2)+1px));
  mask-image: 
    radial-gradient(circle at var(--pos1), transparent var(--r1), black calc(var(--r1)+1px)),
    radial-gradient(circle at var(--pos2), transparent var(--r2), black calc(var(--r2)+1px));
}

使用时在元素上定义变量:

<div class="main-rect circle-cut" 
     style="--pos1:75% top; --r1:30px; --pos2:25% bottom; --r2:25px">
</div>

这种方式灵活性高,能快速调整每个镂空的位置和大小。

内容的提问来源于stack exchange,提问作者Sarim Baig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:17:41