【问题标题】:Clip div with SVG path使用 SVG 路径剪辑 div
【发布时间】:2018-05-07 18:54:06
【问题描述】:

我有两个重叠的divs,我试图达到以下效果:

为了做到这一点,我的逻辑是让两个 div 重叠,在第二个 div 内使用 SVG 创建该形状,并使用该形状剪切第二个 div 并显示其下方的内容(顶部 div)。

我不确定这是否是实现这一目标的最佳逻辑,如果是,我不确定如何使用 SVG 来剪辑 HTML 元素。

这是我目前的 HTML:

<div class="banner_1">
</div>

<div class="banner_2">
    <svg viewBox="0 0 500 500" preserveAspectRatio="xMinYMin meet">
        <path d="M0,20 C100,80 350,0 500,30 L500,00 L0,0 Z" style="stroke: none; fill:red;"></path>
    </svg>
</div>

这是我的 CSS:

.banner_1 {
  min-height: 200px;
  background-color: #41dddb;
}
.banner_2 {
  min-height: 200px;
  background-color: #ddc141;
  margin-top: -100px;
}

这就是https://codepen.io/guillermocarone/pen/gXKpBx

【问题讨论】:

  • HTMLElement 不会像 SVGSVGElement 那样创建画布
  • @Dummy 你有什么不同的方法来实现这个目标吗?

标签: css svg clipping clip image-clipping


【解决方案1】:

您可以使用 SVG 命令 clipPath

<clipPath id="svgPath" >
            <path d="M0,20 C100,80 350,0 500,30 L500,00 L0,0 Z" style="stroke: none; fill:red;"/> 
      </clipPath>

<style>
.banner_1 {
  min-height: 200px;
  background-color: #41dddb;
}
.banner_2 {
  min-height: 200px;
  background-color: #ddc141;
  margin-top: -100px;
}
</style>
<div class="banner_1">
</div>

<div class="banner_2">
    <svg viewBox="0 0 500 500" preserveAspectRatio="xMinYMin meet"> 
	<defs>
	<clipPath id="svgPath" >
	<path d="M0,20 C100,80 350,0 500,30 L500,00 L0,0 Z" style="stroke: none; fill:red;"/> 
  </clipPath>
	</defs>
	
	<rect width="100%" height="100%" fill="#41dddb"  clip-path="url(#svgPath)"  />
        
    </svg>
</div>

DEMO

UPD

另外,关于cmets中的提案

只有底部的图像需要被剪裁,它会与顶部重叠 一。

.banner_1 {
  min-height: 100px;
  background-color: #41dddb;
 
}
.banner_2 {
  background:url(https://s3-us-west-2.amazonaws.com/s.cdpn.io/4273/hawaii-beach.jpg);
   background-size:cover;
}
<div class="banner_1">
</div>

<div class="banner_2">
    <svg viewBox="0 0 500 500" preserveAspectRatio="xMinYMin meet"> 
	<defs>
	<clipPath id="svgPath" >
	<path d="M0,20 C100,80 350,0 500,30 L500,00 L0,0 Z" style="stroke: none; fill:red;"/> 
  </clipPath>
	</defs>
	
	<rect width="100%" height="100%" fill="#41dddb"  clip-path="url(#svgPath)"
	
        
    </svg>
</div>

要替换下图,改background:url

DEMO

【讨论】:

  • 谢谢!但是,如果我正确理解您的方法,这与我已经将红色形状的颜色更改为它后面的 div 的颜色没有什么不同,对吧?它实际上并没有剪裁 div,因此例如,如果这些是图像而不是纯色,它将不起作用。对吗?
  • @Guillermo Carone Cuts and image 做第二个例子?
  • 我在我的问题中添加了第二张示例图片,其中包含我所描述的照片情况。这是你要求的吗?
  • @GuillermoCarone 如果我理解正确,你想得到结果,就像你的第二个例子一样 - 连接了两个裁剪的图像?或者您只需要裁剪一张图片,第二部分将保留为背景
  • 是的,没错,只需要裁剪底部的图像,它会与顶部的图像重叠。我想做的是使用代码对其进行剪辑,而不是使用 Photoshop 编辑图片,以便通过管理面板使非 Photoshop 用户可以轻松编辑该图像
猜你喜欢
  • 2019-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-02
相关资源
最近更新 更多