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

如何将内层div的box shadow移至父级div并控制阴影不溢出

解决阴影超出父元素及波纹圆环实现方案

一、修复box-shadow溢出问题

如果想继续用box-shadow实现波纹圆环,只需给父元素.ripple添加overflow: hidden裁剪溢出内容,同时调整.inner的位置使其居中:

.ripple {
  width: 400px;
  height: 80px;
  margin-top:40px;
  position:relative;
  background: red;
  border-radius: 10px;
  color: #fff;
  display: flex;
  justify-content:center;
  align-items: center;
  overflow: hidden; /* 裁剪超出父元素的阴影 */
}

.inner{
  display: block;
  position:absolute;
  width: 80px;
  height: 80px;
  background: #ff8895;
  box-shadow: 0 0 0 35px rgba(255, 255, 255, 0.2), 0 0 0 70px rgba(255, 255, 255, 0.2);
  border-radius: 100px;
  top: 50%; /* 居中定位 */
  left: 50%;
  transform: translate(-50%, -50%);
}

注:原代码中rgba(256,256,256,...)为错误写法,RGB值范围是0-255,已修正为255。

二、更可控的波纹圆环替代方案

若不想依赖overflow裁剪,推荐用以下两种方式实现,精准控制圆环显示范围:

方案1:径向渐变绘制多层圆环

用radial-gradient直接在容器中画出多层圆环,无需依赖阴影:

.inner{
  display: block;
  position:absolute;
  width: 220px; /* 核心圆直径80px + 两层圆环宽度各70px */
  height: 220px;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background: 
    radial-gradient(circle, transparent 63px, rgba(255,255,255,0.2) 63px, rgba(255,255,255,0.2) 98px, transparent 98px),
    radial-gradient(circle, #ff8895 0 40px, transparent 40px);
}

方案2:伪元素叠加圆环

用两个伪元素作为外层圆环,避免单个元素阴影溢出:

.inner{
  display: block;
  position:absolute;
  width: 80px;
  height: 80px;
  background: #ff8895;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.inner::before, .inner::after{
  content: '';
  position: absolute;
  border-radius: 50%;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
.inner::before{
  width: 150px; /* 80px + 35px*2 */
  height: 150px;
  border: 35px solid rgba(255,255,255,0.2);
}
.inner::after{
  width: 220px; /* 80px + 70px*2 */
  height: 220px;
  border: 70px solid rgba(255,255,255,0.2);
}

三、小图形代码优化建议

当前每个小图形用单独类名过于冗余,可改用通用类+CSS变量简化:

<div class="dot" style="--size:24px;--top:-10px;--left:5px;--opacity:0.5;"></div>
<div class="dot" style="--size:12px;--top:35px;--left:25px;--opacity:0.3;"></div>
<!-- 其余小图形依此类推 -->
.dot{
  width: var(--size);
  height: var(--size);
  border: 2px solid white;
  border-radius: 50%;
  position: absolute;
  top: var(--top);
  left: var(--left);
  background: black;
  opacity: var(--opacity);
}

内容的提问来源于stack exchange,提问作者Atal Shrivastava

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:30:53