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

如何实现图片自定义拼图形状裁剪?求类似background-clip:text的方案

问题描述

我正在制作拼图样式的页面布局,希望图片能呈现其中一块拼图的形状,想询问是否存在类似background-clip:text的属性或方法来实现该效果。目标是让图片填满布局中的灰色区域,我曾尝试使用background-image但未能成功。

布局效果

拼图布局效果

相关代码

HTML

<section class="project-details-section">
        <div class="project-info">
          <h2 class="project-name">Project name</h2>
          <div class="circle-general circle--left-top"></div>
          <div class="circle-general circle--centre-left"></div>
          <p class="project-paragraph">
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Quas ab autem iusto repudiandae fugiat eaque, voluptatem alias repellat qui architecto dolor est excepturi ipsa animi provident aliquam dolorem, expedita quaerat nemo debitis cupiditate? Excepturi optio molestias ea aperiam dignissimos neque?
          </p>
        </div>
        <div class="project-photo">
          <div class="circle-general circle--right-top"></div>
        </div>
      </section>

CSS

.projects-section {
  background-color: #0ac507;
  position: relative;
  z-index: 95;
}

.project-details-section {
  color: white;
  position: relative;
  z-index: 96;
  display: grid;
  grid-template-columns: 50% 50%;
}

.project-info {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;

  position: relative;
  z-index: 99;
  background-color: #ff5900;
  
}

.project-name {
  font-size: 3.5rem;
}

.project-paragraph {
  text-align: center;
  padding: 0 8rem;
  margin-top: 4rem;
}

.project-photo {
  background-color: grey;
}

.circle--left-top {
  top: 0;
  left: 5%;
  transform: translate(50%, -50%);
}

.circle--right-top {
  top: 0;
  right: 5%;
  transform: translate(-50%, -50%);
}

.circle--centre-left {
  top: 55%;
  left: 100%;
  transform: translate(-50%, -50%);
}

解决方案

要实现拼图形状的图片填充,不需要类似background-clip:text的属性,以下两种方法可以直接达成需求:

方法一:用clip-path裁剪容器

clip-path可以直接定义元素的可见区域,你可以根据拼图形状绘制路径,让图片只显示指定区域。

修改.project-photo的CSS:

.project-photo {
  /* 替换为你的目标图片路径 */
  background-image: url('你的图片地址');
  background-size: cover;
  background-position: center;
  /* 示例为右侧带凹口的拼图路径,可根据实际形状调整 */
  clip-path: polygon(0 0, 100% 0, 100% 20%, 90% 20%, 90% 30%, 100% 30%, 100% 100%, 0 100%, 0 80%, 10% 80%, 10% 70%, 0 70%);
}

你可以用在线图形工具生成匹配拼图形状的路径代码,调整起来更直观。

方法二:用CSS mask属性做遮罩

如果拼图形状复杂,可制作一张和容器尺寸一致的黑白遮罩图(白色区域显示图片,黑色区域隐藏),再通过mask属性应用:

.project-photo {
  background-image: url('你的图片地址');
  background-size: cover;
  background-position: center;
  /* 替换为你的遮罩图片路径 */
  -webkit-mask-image: url('遮罩图片地址');
  mask-image: url('遮罩图片地址');
  -webkit-mask-size: cover;
  mask-size: cover;
}

补充说明

你之前用background-image没成功,是因为容器本身还是矩形,图片会填满整个矩形,拼图凹口部分只是被旁边元素覆盖,但图片依然显示。上面两种方法都是直接裁剪图片的显示区域,让它刚好匹配灰色拼图区域的形状。

另外,别忘了给.circle-general添加基础圆形样式,让凹口效果正常显示:

.circle-general {
  position: absolute;
  width: 60px;
  height: 60px;
  border-radius: 50%;
  background-color: #0ac507; /* 和外部背景色保持一致 */
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 00:40:35