【问题标题】:SVG nine-slice scalingSVG 九层缩放
【发布时间】:2014-04-02 20:52:34
【问题描述】:

如何在 SVG 中获得nine-slice scaling? 具体来说,我正在寻找一种方法来定义 SVG 对象,这些对象在调整大小时表现得像九个切片对象(一些元素保持其尺寸,而其他元素随容器缩放)。

【问题讨论】:

标签: svg


【解决方案1】:

如果您打算将其应用于 svg,那么如果您引用 svg,CSS3 Borders and backgrounds 规范应该可以帮助您做到这一点。

如果您想在 svg 文件中执行此操作,那么您可以使用 <pattern>(可能与一些嵌套的 元素组合)来执行类似的操作。嵌套 元素可能是执行此操作的另一种方式,请参见例如 this example。或者使用 9 个具有不同变换的 元素,每个元素都应用了不同的剪辑路径。

【讨论】:

  • 也许我遗漏了一些东西,但该示例通过使用具有边框半径的矩形而不是通过使用模式、嵌套 svg 或使用元素来实现其“可扩展性”。
  • 该示例使用此 svg 作为 css 背景图像:treebuilder.de/svg/svgincss/tv/tv.svg。该 svg 有另一个 嵌套在里面。
  • 但是嵌套的 svg 只是绘制了电视的“底座”——你可以删除它,电视仍然会显示“九片”,比如缩放。感兴趣的是电视的角落而那些只能正确缩放,因为它们使用的是具有边框半径而不是路径的矩形......
【解决方案2】:

您需要在形成边缘和中心的元素周围设置一些边距,以告诉它们从左侧/顶部开始 X 像素,从右侧/底部开始 y 像素。使用foreignObject,像这样:

<foreignObject width="100%" height="100px">
    <div xmlns="http://www.w3.org/1999/xhtml" style="margin: 0 100px;">
        <svg>
            <!-- code here -->
        </svg>
    </div>
</foreignObject>

我在这里写了关于将缩放网格应用于 SVG 的方法:http://w3.eleqtriq.com/2014/03/the-holy-grail-of-image-scaling/ 干杯,德克

【讨论】:

  • 这是出色的工作。我刚刚在 Adob​​e 发布了一个功能请求,要求他们查看您的实现。也许他们可以将其添加到 SVG 导出中。也许我们都可以进去投票...illustrator.uservoice.com/forums/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-04
  • 2017-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多