html - 使用 HTML 和 CSS 的 SVG 剪辑路径问题

标签 html css svg clip

我一直在尝试了解如何将 SVG 剪辑路径应用于 HTML 元素,但遇到了一些奇怪的事情。

这是 fiddle :http://jsfiddle.net/jakemcgraw/8hr99/

<div id="diamond1" class="diamond">
    <div id="clip1">
        <div></div>
    </div>
</div>
<div id="diamond2" class="diamond">
    <div id="clip2">
        <div></div>
    </div>
</div>
<div id="diamond3" class="diamond">
    <div id="clip3">
        <div></div>
    </div>
</div>
<svg>
    <defs>
        <clippath id="relative_path">
            <polygon points="50% 0, 100% 50%, 50% 100%, 0 50%"></polygon>
        </clippath>
    </defs>
</svg>
<svg>
    <defs>
        <clippath id="absolute_path">
            <polygon points="100 0, 200 100, 100 200, 0 100"></polygon>
        </clippath>
    </defs>
</svg>

CSS:

#clip1 {
    -webkit-clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
    -moz-clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
    -o-clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
    clip-path: polygon( 50% 0, 100% 50%, 50% 100%, 0 50% );
}

#clip2 {
    -webkit-clip-path: url(#relative_path);
    -moz-clip-path: url(#relative_path);
    -o-clip-path: url(#relative_path);
    clip-path: url(#relative_path);
}

#clip3 {
    -webkit-clip-path: url(#absolute_path);
    -moz-clip-path: url(#absolute_path);
    -o-clip-path: url(#absolute_path);
    clip-path: url(#absolute_path);
}

一些注意事项:

  1. 内联 clip-path css 声明仅适用于 Chrome 和 Opera。

  2. 具有相对尺寸(即 50%)的 SVG 似乎根本不适用于任何浏览器。

  3. 具有绝对尺寸的 SVG 仅适用于 Firefox。

请注意,第二个和第三个元素在 Chrome 和 Opera 中完全消失了。现在,看看这个 fiddle :http://jsfiddle.net/jakemcgraw/7S5Lk/

这个在 Firefox 中工作正常,但在 Chrome 和 Opera 中,10px 的边距移动了底层元素,而不是剪辑。 SVG clipPath 尺寸似乎作为一个整体应用于文档,而不是所讨论的元素。

毫不奇怪,这两个 fiddle 在 IE10 中都不起作用。我已经看到 SVG 在 IE10 中工作,所以也许唯一的问题是 SVG 和 HTML 的混合?不确定。

还请注意,两者 都不能在 Safari 中工作。

我的实现有误吗?是否有适当的方法将 SVG 剪辑路径与我缺少的 HTML 元素混合?

最佳答案

诀窍是使用 clipPathUnits="objectBoundingBox" 并将您的点修改为边界框的比率。

此方法创建一个相对剪辑路径,并在 Safari 中工作。

请参阅以下 fiddle :http://jsfiddle.net/7S5Lk/6/

关于html - 使用 HTML 和 CSS 的 SVG 剪辑路径问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20438401/

相关文章:

javascript - 为什么 js 不能在 cordova 中工作?

javascript - rails :how to create dynamic drop-down box in rails?

html - <h1> 标签之前和之后的响应式图像

javascript - 使用 jQuery 更新 HTML 元素样式参数值

iphone - 为什么我的网页不能在 Iphone 浏览器中换行?

javascript - 可见性不适用于 svg g 标签

Javascript 仅在点击时显示完整图像,否则适合屏幕

javascript - 根据单选按钮动态更新选择

javascript - 不显示 d3 标记

svg - 从 svg 到 Raphael