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

React项目如何实现带侧边半圆缺口及统一阴影的卡片组件

核心问题原因

你当前的实现有三个核心问题:

  • 伪元素用了边框样式,背景是透明的,看起来是附加在卡片上的圆形,而非向内凹陷的缺口
  • 卡片设置了overflow: hidden,会裁切边缘的阴影表现,无法实现缺口处的自然阴影衔接
  • 仅给卡片容器加了box-shadow,阴影只会沿容器矩形轮廓生成,不会适配缺口形状

实现方案

推荐两种可直接落地的实现方式,都可以达到你要的缺口阴影效果:

方案1:背景渐变挖洞法(兼容性好,代码最简洁)

直接用径向渐变在卡片左侧对应位置挖掉半圆形透明区域,配合drop-shadow滤镜实现适配轮廓的阴影:

.card__container{
  padding:1.75rem;
  margin:1.25rem 2.5rem 2.5rem;
  position:relative;
  height:100vh;
  /* 替换box-shadow为drop-shadow,会跟随元素透明轮廓生成阴影 */
  filter: drop-shadow(0 0 8px rgba(0,0,0,.08));
  /* 用径向渐变挖掉左侧的半圆缺口,15px是半圆半径,110px是距离顶部的位置 */
  background: radial-gradient(circle at left 110px, transparent 15px, #fff 0);
}
/* 可直接删除原有的:after伪元素代码 */

这个方案不需要额外的伪元素,直接通过背景实现缺口,阴影自动适配形状,效果最自然。

方案2:伪元素遮盖法(适合需要对缺口做额外样式调整的场景)

用和页面背景同色的伪元素卡在卡片左侧边缘,模拟缺口效果,同时调整阴影衔接:

.card__container{
  padding:1.75rem;
  margin:1.25rem 2.5rem 2.5rem;
  position:relative;
  height:100vh;
  box-shadow: 0 0 8px 0 rgba(0,0,0,.08);
  background: #fff;
  /* 给卡片左侧加对应间距,避免内容被缺口挡住,可按需调整 */
  padding-left: calc(1.75rem + 15px);
}

.card__container:after{
  content: '';
  position: absolute;
  display: block;
  width: 30px;
  top: calc(110px - 15px);
  left: -15px;
  height: 30px;
  /* 背景和页面背景保持一致,替换为你的页面实际背景色即可 */
  background: #f5f5f5;
  border-radius: 50%;
  /* 给伪元素加内阴影,模拟缺口处的凹陷阴影效果,参数和卡片阴影对应即可 */
  box-shadow: inset 0 0 4px rgba(0,0,0,.06);
}

如果你的页面背景是渐变或者有图案,优先选择方案1,不需要匹配背景色,适配性更强。

内容的提问来源于stack exchange,提问作者Ali Ehyaie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:45:06