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;
}

成功设置上阴影生效~

相关推荐
Csvn6 小时前
WASM
前端
修己xj8 小时前
我用 AI 给自己写了一个 Markdown 编辑器,然后把它开源了
前端
FRing038 小时前
vue2干货总结2(v-bind、v-for、v-model、指令修饰符、v-bind操作class和style)
开发语言·前端·vue.js·vue2
幸运小猿8 小时前
模拟慢上传-处理超时重试image 丢失线上问题
前端·javascript·html
moshuying10 小时前
网购能买Token了!
前端
h_654321010 小时前
echarts实现柱状图加一条横线
前端·echarts
风骏时光牛马10 小时前
生成一个后端标题,只需要一个标题,不需要其他的任何文本。
前端
子非鱼@Itfuture10 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端
郭小李10 小时前
openFeign入门
java·开发语言·前端
馒头不想说话10 小时前
AI当运营,帮你省人力
前端