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 小时前
Java类型推断完全指南:从var到菱形运算符,掌握使用限制与最佳实践
java·前端·ai编程
To_OC4 小时前
踩了个 TS 的坑之后,我终于把 type 和 interface 掰明白了
前端·react.js·typescript
GreenTea4 小时前
深度解读 Anthropic 多智能体报告:更强的模型 ≠ 更好的协调
前端·后端·算法
浮生望4 小时前
前端API工程化:用 Mock 数据与 Axios 配置实现独立于后端的并行开发
前端
万少5 小时前
给 DeepSeek Harness 装个"应用商店":一条命令,595 个插件随你逛
前端·javascript·后端
波波0075 小时前
C# 15 重磅新特性: 带标签 break 与 continue:重新定义嵌套循环控制流
服务器·前端·c#
Brown.alexis6 小时前
es6知识点1-自备使用
前端·ecmascript·es6
小爬的老粉丝7 小时前
JavaScript 纯前端预览 WPS:先识别容器,再路由解析器
前端·javascript·wps
计算机魔术师7 小时前
新兴多智能体系统的模式与问题
前端
用户059540174468 小时前
AI Agent 上下文污染踩坑实录:用 pytest + Redis 揪出 3 类记忆串号 bug,排查 6 小时
前端·css