• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

【前端SVG】填充

武飞扬头像
juejin
帮助216

前言

SVG中,图形对象一般使用fillstroke进行填充。SVG可以自定义一个图形作为填充的背景,这个图形可以是一个SVG元素,也可以是位图图像,下面我们结合实例来讲解如何去使用。

图案

pattern标签用于定义一个填充对象,可以将定义的这个对象到指定图形中进行重复、平铺、覆盖填充。之后使用自身的属性fill / stroke来引用自定义的填充对象pattern

它和渐变一样,需要被放置到defs标签中。

我们先看下这个简单例子:

<svg width="200" height="200">
    <defs>
        <pattern id="bg_red_circle" width="100%" height="100%">
            <circle cx="25" cy="25" r="20" stroke="red" fill="none" fill-opacity="0.5"/>
        </pattern>
    </defs>
    <rect width="50" height="50" x="10" y="10" stroke="blue" fill="url(#bg_red_circle)"></rect>

34.png

使用pattern定义了一个自定义图案,在pattern标签中放置你想要的图形,这里我们放的是一个红色无填充的圆形。给pattern标签需要绑定一个ID值,用于我们在其他元素上引用这个自定义图案进行填充。

这里是widthheight是定义这个pattern是否占满被应用的图形,100%( or 1 )即是占满整个元素。如果不是占满,则是重复平铺在被应用的图形上。如果你想要在绘制时偏移矩形的开始点,也可以使用xy属性

pattern中,它也有自己的定位系统以及它们的大小。和SVG类似。

上面的例子我们的背景,被填充的图形比例都是1:1,我们再看看另外一个例子:

<svg width="300" height="300">
    <defs>
        <pattern id="bg_red_circle" x="0" y="0" width="20" height="20" patternUnits="userSpaceOnUse"
        </pattern>
    </defs>
    <rect width="200" height="200" stroke="blue" fill="url(#bg_red_circle)"></rect>
</svg>

35.png

与上个例子不同的是,这个例子设置了自定义图形的widthheight(这与patternUnits有关系),被填充的图形大小则是200*200,当画布还有多余的位置则会平铺填充。

这个例子还多了一个patternUnits属性, 用来定义图案效果区域的单位。他有两个值分别是userSpaceOnUseobjectBoundingBox。他的默认值是objectBoundingBox

  • objectBoundingBoxxywidthheight表示的值都是外框的坐标系统(包裹pattern的元素)。也就是说,图案的单位进行了一个缩放,比如:pattern中为1的值,会变成和包裹元素的外框的widthheight一样的大小。(使用这个值时,width和height需要小于1.0,否则图案只会出现一次)
  • userSpaceOnUsexywidthheight表示的值都是当前用户坐标系统的值。也就是说,这些值没有缩放,都是绝对值。

在上面例子中,圆是完美的铺满了整个矩形。我们可以设置xy值,看看有什么变化?

<svg width="300" height="300">
    <defs>
        <pattern id="bg_red_circle" x="10" y="10" width="20" height="20" patternUnits="userSpaceOnUse">
            <circle cx="10" cy="10" r="10" stroke="red" fill="none"/>
        </pattern>
    </defs>
    <rect width="200" height="200" stroke="blue" fill="url(#bg_red_circle)"></rect>
</svg>

36.png

从矩形的四边,我们可以发现整个图形背景进行了偏移,也就是说xy属性是修改整个图形的位置。

同样,我们也可以将这个图案应用到描边中

<svg width="300" height="300">
    <defs>
        <pattern id="bg_red_circle" x="10" y="10" width="20" height="20" patternUnits="userSpaceOnUse">
            <circle cx="10" cy="10" r="10" stroke="red" fill="none"/>
        </pattern>
    </defs>
    <rect width="200" height="200" fill="none" stroke-width="20" stroke="url(#bg_red_circle)"></rect>
</svg>

37.png

属性 说明
x 自定义图案x轴坐标
y 自定义图案y轴坐标
width 自定义图案的宽度
height 自定义图案的宽度
preserveAspectRatio 以保留原始内容的宽高比
xlink:href 用于指另一种模式
patternUnits 用来定义图案效果区域的单位
patternContentUnits 用来定义模式内容区域的单位

最后

本篇文章讲述了在SVG中的如何在创建图案,然后使用fillstroke属性引用到绘制的图形中。以及图案中的一些相关属性,感谢你的阅读!

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanekjh
系列文章
更多 icon
同类精品
更多 icon
继续加载