【问题标题】:SVG polygon points with percentage units support支持百分比单位的 SVG 多边形点
【发布时间】:2013-07-06 01:50:33
【问题描述】:

我正在尝试制作一个可以轻松调整大小的流畅 SVG 画布。到目前为止,我到处都在使用百分比。但是,似乎 SVG polygonpaths 不支持 point 属性中的百分比。这是一个例子:

(jsFiddle)

<svg width='90%' height='90%' style='background-color: whitesmoke'>
    <rect x='40%' y='40%' width='25%' height='25%' />

    <polygon points="0,0 0,100 30,20 30,0" />
    <polygon points="30,0 30,20 60,0 60,0" />
    <polygon points="60,0 60,0 90,30 90,0" />
</svg>

但是,如果我开始将 points 属性中的数字更改为百分比,则会失败并在控制台中出现解析错误。我正在寻找一种方法让多边形可以使用&lt;svg&gt; 元素调整大小。

【问题讨论】:

标签: svg


【解决方案1】:

通过使用 viewBox 和容器元素(无论大小),我认为您可以实现您正在寻找的效果:http://jsfiddle.net/davegaeddert/WpeH4/

<div id="svg-container" style="width:100%;height:100%;">
    <svg width='100%' height='100%' viewBox="0 0 100 100" preserveAspectRatio="none" style='background-color: whitesmoke'>
        <rect x='40%' y='40%' width='25%' height='25%' />

        <polygon points="0,0 0,100 30,20 30,0" />
        <polygon points="30,0 30,20 60,0 60,0" />
        <polygon points="60,0 60,0 90,30 90,0" />
    </svg>
</div>

如果你给 viewBox 设置0 0 100 100 的大小,那么点可以写成百分比,形状会随着 svg 缩放。

【讨论】:

  • 很好,但不幸的是线条的大小(笔画宽度)也被拉伸了)
  • @FlorianB - 属性 vector-effect="non-scaling-stroke" 应该可以解决这个问题。
  • 很好,但它保留了一个正方形,对吧?当你想让它全屏(大部分时间是水平比例)时,有没有解决方案?
  • 这对我来说效果很好,能够响应地缩小现有的 SVG。谢谢!不过,需要注意的一件事是,为了正确保持 svg 大小,我必须在 svg 元素上使用 display:block;
  • 可以将vector-effect="non-scaling-stroke" 应用于&lt;g&gt; 标签或其他父标签吗?如果不将它直接应用到&lt;path&gt; 并且有很多路径,我无法让它工作,这可能很烦人。
【解决方案2】:

您可以将元素与g 组合在一起并使用转换:

<svg width='90%' height='90%' style='background-color: whitesmoke'>
    <rect x='40%' y='40%' width='25%' height='25%' />

    <g transform="scale(0.4 0.4)">
        <polygon points="0,0 0,100 30,20 30,0"/>
        <polygon points="30,0 30,20 60,0 60,0"/>
        <polygon points="60,0 60,0 90,30 90,0"/>
    </g>
</svg>

【讨论】:

  • 这没有帮助。最后,您将 90 像素宽的多边形组缩放为 45 像素的固定数字。我需要的是,使用 svg 元素调整大小。现在rect 这样做了,它确实没有任何修复。假设我有一个带有polygon 的三角形,我将如何以同样的方式表现它?尝试制作&lt;svg width="10%" height="10%"&gt; 你会明白我的意思。
  • 那你不能用viewBox吗?它会自动缩放所有内容。
  • OK viewBox 有点像,我现在遇到了类似d3.js 的错误。谢谢!
  • 不知道您是否在 viewBox 中使用了百分比。在修复我的 viewBox 后,我遇到了这个问题。如果它导致 d3.js 错误,这是我发现的链接。 stackoverflow.com/questions/24287355/d3js-svg-viewbox-attribute
猜你喜欢
  • 2016-12-24
  • 2023-04-04
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 2016-07-11
  • 2016-11-26
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多