一篇文章教会你使用SVG填充图案

开发 前端
SVG填充图案用于用由图像组成的图案填充形状。该图案可以由SVG图像(形状)或位图图像组成。SVG填充模式看起来就像从Photoshop等中所习惯的那样,被称为“平铺”。

[[381995]]

SVG填充图案用于用由图像组成的图案填充形状。该图案可以由SVG图像(形状)或位图图像组成。SVG填充模式看起来就像从Photoshop等中所习惯的那样,被称为“平铺”。

一、填充图案

简单的svg填充模式。

示例:

  1. <!DOCTYPE html> 
  2. <html> 
  3. <body style="background-color: aqua;"
  4. <title>项目</title> 
  5. <svg width="500" height="150"
  6. <defs> 
  7. <pattern id="pattern1" x="10" y="10" width="20" height="20" patternunits="userSpaceOnUse"
  8. <circle cx="10" cy="10" r="10" style="stroke: none; fill: #FF0000"></circle> 
  9. </pattern> 
  10. </defs> 
  11. <rect x="10" y="10" width="100" height="100" style="stroke: #000000; fill: url(#pattern1);"
  12.      </rect> 
  13. </svg> 
  14. </body> 
  15. </html> 

代码解析:

首先,在元素内定义元素。图案包含一个circle元素。

circle元素将用作填充图案。其次,在CSS属性中声明一个元素fill,该元素引用其style属性中的元素ID。

其次,声明一个元素,该元素在CSS fill属性中引用其样式属性中的元素ID。

运行后图像效果:

注意

元素中定义的圆是如何用作矩形的填充的。还要注意圆圈是如何从左到右,从上到下不断重复的。

二、X,Y,宽度和高度

pattern元素的x和y属性定义图案开始在元素中的形状中的距离。元素的width和height属性定义图案的宽度和高度。

案例分析

这是从头开始的示例,并且将x和y设置为0:

  1. <svg width="500" height="150"
  2.    <defs> 
  3.        <pattern id="pattern2" 
  4.                 x="0" y="0" width="20" height="20" 
  5.                 patternUnits="userSpaceOnUse"
  6.  
  7.        <circle cx="10" cy="10" r="10" style="stroke: none; fill: #FF0000"
  8.          </circle> 
  9.        </pattern> 
  10.    </defs> 
  11.    <rect x="10" y="10" width="100" height="100" 
  12.          style="stroke: #000000; fill: url(#pattern2);" /> 
  13. </svg> 

运行后图像效果:

注意

图案现在是如何从圆的中间开始的(在矩形的顶部和左侧)。创建自己的填充图案时,通过使用x和y属性值来实现所需的效果。

width和height属性设定的图案的宽度和高度。

在前面的示例中width,height它们都设置为20,即圆的直径。因此,圆圈一遍又一遍地重复着,中间没有空格。

设置图案的width(宽度)为25,而不是20。

这样,现在在水平圆圈之间现在有5个像素间隔。

  1. <pattern id="pattern2" x="0" y="0" width="25" height="20" patternUnits="userSpaceOnUse"

width, height都设置为25

下面是相同的实例,但是x和y设置为10 (<pattern>元素内的圆心)

  1. <pattern id="pattern2" x="10" y="10" width="25" height="25" patternUnits="userSpaceOnUse"

现在,图案从一个完整的圆圈开始,但是仍然有多余的垂直和水平空间。

三、嵌套模式

可以嵌套填充图案,以便填充图案在内部使用另一个填充图案。

该示例具有一个使用圆形作为填充图案的矩形。圆内部使用矩形作为填充图案。

示例:

  1. <svg width="500" height="150"
  2. <defs> 
  3. <pattern id="innerPattern" x="3" y="3" width="9" height="9" patternUnits="userSpaceOnUse"
  4. <rect x="0" y="0" width="6" height="6" style="stroke: none; fill: #ff0000;" /> 
  5. </pattern> 
  6. <pattern id="outerPattern" x="12" y="12" width="25" height="25" patternUnits="userSpaceOnUse"
  7. <circle cx="10" cy="10" r="10" style="stroke: #0000ff; fill: url(#innerPattern)" /> 
  8. </pattern> 
  9. </defs> 
  10. <rect x="10" y="10" width="100" height="100" style="stroke: #000000; fill: url(#outerPattern);" /> 
  11. </svg> 

运行后图像效果:

外部矩形现在由圆形填充,圆形又由矩形填充。

四、转换模式

可以使用标准SVG转换函数转换填充模式。可以使用patternTransform属性来实现这一点。

SVG模式转换示例

定义了一个简单的图案,该图案在用作矩形的填充图案之前旋转了35度。

  1. <svg width="500" height="150">     
  2. <defs>     
  3. <pattern id="transformedPattern"     
  4. x="10" y="10" width="20" height="20"     
  5. patternUnits="userSpaceOnUse"     
  6. patternTransform="rotate(35)"     
  7. >     
  8. <circle cx="10" cy="10" r="10" style="stroke: none; fill: #0000ff" />     
  9. </pattern>     
  10. </defs>     
  11. <rect x="10" y="10" width="100" height="100"     
  12. style="stroke: #000000; fill: url(#transformedPattern);" />     
  13. </svg> 

运行后图像效果:

五、总结

本文基于Html基础,讲解了有关SVG中的填充的相关知识点。如何去填充一个图案,通过改变其中的属性,呈现不一样的填充效果。以及嵌套模式,转换模式的实际应用。

 

通过案例的分析,效果图的展示,能够让读者更好的去理解填充图的属性。

本文转载自微信公众号「前端进阶学习交流」,可以通过以下二维码关注。转载本文请联系前端进阶学习交流公众号。

 

责任编辑:武晓燕 来源: 前端进阶学习交流
相关推荐

2021-02-19 19:35:53

SVG 形状元素

2021-03-02 18:35:27

SVG开发空间

2020-12-01 09:36:35

SVG元素属性

2021-03-19 10:01:41

SVG画多边形Htm基础

2020-11-13 08:14:28

JavaScript

2019-10-17 19:15:22

jQueryJavaScript前端

2021-05-29 10:20:54

GoModules语言

2021-12-28 09:27:45

Javascript 高阶函数前端

2021-09-15 10:00:33

Go语言Modules

2023-06-21 00:10:17

JSONWeb服务器JavaScript

2020-12-10 08:20:27

Python微博评论

2021-02-24 10:14:04

PythonClassPython基础

2020-12-08 08:09:49

SVG图标Web

2021-02-26 20:01:57

SVG滤镜元素

2020-12-31 08:35:07

Python抖音浏览器

2021-12-30 10:28:30

Python 微博评论

2020-12-16 08:07:28

语言基础反射

2020-12-23 08:12:08

javascriptSVG脚本SVG元素

2021-01-01 09:18:48

SVG图像元素

2020-12-29 09:39:38

元素属性定位
点赞
收藏

51CTO技术栈公众号