首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有内联SVG的响应式剪辑路径

带有内联SVG的响应式剪辑路径
EN

Stack Overflow用户
提问于 2015-02-04 09:05:28
回答 1查看 18.7K关注 0票数 15

在具有背景的元素上(图像或纯色实际上并不重要):

代码语言:javascript
复制
<header id="block-header"></header>

我正在尝试使用SVG应用剪辑路径。为了实现这一点,我将SVG内联到相同的元素中,如下所示:

代码语言:javascript
复制
<header id="block-header">
    …
    <svg width="100%" height="100%" viewBox="0 0 4000 1696" preserveAspectRatio="none">
        <defs>
          <clipPath id="myClip">
            <path d="M0 1568.18V0h4000v1568.18S3206.25 1696 2000 1696C984.37 1696 0 1568.18 0 1568.18z"/>
          </clipPath>
        </defs>
    </svg>
    …
</header>

您可以运行下面的代码片段或检查JSFiddle。您可以看到原始SVG图像(黑色)被内联,底部具有曲线度,并且具有响应性。相比之下,红色矩形显示应用(或不应用)与clip-path相同的图像。

我想我误解了viewBoxpreserveAspectRatio属性,尽管在这里找不到真正的错误所在。任何帮助都将不胜感激。

代码语言:javascript
复制
#block-header {
    background: Red;
    min-height: 100px;
    -webkit-clip-path: url(#myClip);
	clip-path: url(#myClip);
}
代码语言:javascript
复制
<h1>SVG image</h1>
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100" viewBox="0 0 4000 1696" preserveAspectRatio="none"><path d="M0 1568.18V0h4000v1568.18S3206.25 1696 2000 1696C984.37 1696 0 1568.18 0 1568.18z"/></svg>

<h1><code>clip-path</code> using the same SVG</h1>
<header id="block-header">
    <svg width="100%" height="100" viewBox="0 0 4000 1696" preserveAspectRatio="none">
        <defs>
          <clipPath id="myClip">
            <path d="M0 1568.18V0h4000v1568.18S3206.25 1696 2000 1696C984.37 1696 0 1568.18 0 1568.18z"/>
          </clipPath>
        </defs>
    </svg>
</header>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-04 09:40:52

对SVG剪辑路径的引用是对剪辑路径定义本身的引用,在这种情况下,<svg>的尺寸或其他属性是没有意义的。

在您的示例中发生的情况是,您正在将一个4000 px宽的剪辑路径应用于您的标题。这可能只有900像素宽的数量级。所以曲率是不可见的。

如果需要响应式剪辑路径,则应使用clipPathUnits="objectBoundingBox"对其进行定义。

代码语言:javascript
复制
#block-header {
    background: Red;
    min-height: 100px;
    -webkit-clip-path: url(#myClip);
	clip-path: url(#myClip);
}
代码语言:javascript
复制
<h1>SVG image</h1>
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100" viewBox="0 0 1 1" preserveAspectRatio="none"><path d="M0,0 1,0 1,0.9 C 1,0.9, 0.77,1, 0.5,1 0.23,1, 0,0.9,0,0.9z"/></svg>

<h1><code>clip-path</code> using the same SVG</h1>
<header id="block-header">
    <svg width="0" height="0">
        <defs>
          <clipPath id="myClip" clipPathUnits="objectBoundingBox">
            <path d="M0,0 1,0 1,0.9 C 1,0.9, 0.77,1, 0.5,1 0.23,1, 0,0.9,0,0.9z"/>
          </clipPath>
        </defs>
    </svg>
</header>    

Fiddle here

票数 23
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28311741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档