CSS 创建不规则图形并设置阴影

css 绘制不规则图形

使用 MDN clip-path介绍

tsx 复制代码
style={{
  clipPath: 'polygon(0 0, 100% 0, 100% 100%, 8% 100%)',
}}
tsx 复制代码
 const funnelData: FunnelItem[] = [
    {
      label: '会话总数',
      value: 64,
    },
    {
      label: '咨询用户数',
      value: 35,
    },
    {
      label: '留资数',
      value: 16,
    },
  ];

  return (
    <div className="w-[330px] bg-white p-6 pr-16">
      <h2 className="mb-6 text-base font-medium">会话漏斗</h2>
      <div className="relative">
        {funnelData.map((item, index) => (
          <div
            key={item.label}
            className={cn(
              'relative mb-1 flex h-16 items-center justify-between',
              'my-2 px-6 text-white',
              index === 0 && 'w-full bg-new-media-blue-900',
              index === 1 && 'w-[90%] bg-new-media-blue-600',
              index === 2 && 'w-[80%] bg-new-media-blue-300',
              'ml-auto',
            )}
            style={{
              clipPath: 'polygon(0 0, 100% 0, 100% 100%, 8% 100%)',
            }}
          >
            <span className="ml-2 font-bold">{item.label}</span>
            <span className="text-2xl font-medium">{item.value}</span>
          </div>
        ))}

        {/* 右侧标签和箭头 - 开口率 */}
        <img
          src={ApertureRatio}
          alt="开口率"
          className="absolute right-[-30px] top-[20px] h-[70px]"
        />

        {/* 右侧标签和箭头 - 转化率 */}
        <img
          src={ConversionRate}
          alt="转化率"
          className="absolute bottom-[20px] right-[-30px] h-[70px]"
        />
      </div>
    </div>
  );

可以拖拽生成 css 代码的 clip-path 的网站

www.jiangweishan.com/tool/clippy...

不规则图形添加阴影小技巧

添加阴影一般使用 box-shadow,但为不规则图形添加阴影可能没效果。

创建不规则图形

tsx 复制代码
  <div className={styles.demo}></div>
css 复制代码
.demo {
  background: green;
  padding: 30px;
  clip-path: polygon(30px 0%, 100% 0%, 100% 100%, 30px 100%, 0 50%)
}
css 复制代码
.demo {
  background: green;
  padding: 30px;
  clip-path: polygon(30px 0%, 100% 0%, 100% 100%, 30px 100%, 0 50%);
  box-shadow: 0 0 10px 2px #323200;
}

没效果

正确做法 添加一个父元素 div 包裹,然后使用 filter: drop-shadow 添加阴影

tsx 复制代码
<div className={styles.shadow}>
  <div className={styles.demo}></div>
</div>
css 复制代码
.shadow {
  filter: drop-shadow(-1px 6px 3px rgba(50, 50, 0, 0.5));
}

.demo {
  background: green;
  padding: 30px;
  clip-path: polygon(30px 0%, 100% 0%, 100% 100%, 30px 100%, 0 50%);
  // box-shadow: 0 0 10px 2px #323200;
}

成功设置上阴影生效~

相关推荐
酒尘&3 小时前
JS数组不止Array!索引集合类全面解析
开发语言·前端·javascript·学习·js
学历真的很重要3 小时前
VsCode+Roo Code+Gemini 2.5 Pro+Gemini Balance AI辅助编程环境搭建(理论上通过多个Api Key负载均衡达到无限免费Gemini 2.5 Pro)
前端·人工智能·vscode·后端·语言模型·负载均衡·ai编程
用户47949283569154 小时前
"讲讲原型链" —— 面试官最爱问的 JavaScript 基础
前端·javascript·面试
用户47949283569154 小时前
2025 年 TC39 都在忙什么?Import Bytes、Iterator Chunking 来了
前端·javascript·面试
大怪v5 小时前
【Virtual World 04】我们的目标,无限宇宙!!
前端·javascript·代码规范
狂炫冰美式6 小时前
不谈技术,搞点文化 🧀 —— 从复活一句明代残诗破局产品迭代
前端·人工智能·后端
xw57 小时前
npm几个实用命令
前端·npm
!win !7 小时前
npm几个实用命令
前端·npm
代码狂想家7 小时前
使用openEuler从零构建用户管理系统Web应用平台
前端
dorisrv8 小时前
优雅的React表单状态管理
前端