欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

初识SVG(四)

程序员文章站 2024-01-28 16:06:16
...

3.1.线性渐变

  • <linearGradient>和<stop>
    • <linearGradient>标签必须嵌套在<defs>的内部。<defs>标签是definitions的缩写,它可对诸如渐变之类的特殊元素进行定义。线性渐变可以定义为水平,垂直或角渐变。
      • 当y1和y2相等,而x1和x2不同时,可创建水平渐变
      • 当x1和x2相等,而y1和y2不同时,可创建垂直渐变
      • 当x1和x2不同,且y1和y2不同时,可创建角形渐变
  • 定义方向
  • 关键点位置和颜色
    • 关键点由stop标签定义,其中offset一般为小于1的参数,用来定义当前渐变的开始位置,计算方向延渐变方向(也就是在 <linearGradient>中定义的方向)
  • gradientUnits
    • gradientUnits="‘userSpaceOnUse’ or ‘objectBoundingBox’。使用视图框或对象,以确定相对位置矢量点。 (默认为’objectBoundingBox)"

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>线性渐变</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 600" width="250" height="700" preserveAspectRatio="xMinYMin meet">
    	<!--defs用来定义某些元素,但不在实际世界中展示,使用进行引用即可-->
        <defs>
        	<!--x1,y1,x2,y2用来定义渐变的起始位置-->
            <linearGradient id="grad1" x1="0" y1="0" x2="1" y2="1">
                <stop offset="0" stop-color="#1497FC"></stop>
                <stop offset="0.5" stop-color="#A469BE"></stop>
                <stop offset="1" stop-color="#FF8C00"></stop>
            </linearGradient>
        </defs>
        <!--url(#grad1)用来引用defs标签-->
        <rect x="100" y="100" fill="url(#grad1)" width="200" height="150"></rect>
    </svg>
</body>
</html>

效果:
初识SVG(四)

3.2.径向渐变(与线性渐变类似)

  • <radialGradient>和<stop>
    • cx,cy和r属性定义渐变的圆心坐标和半径尺寸
    • fx与fy属性用来规定渐变焦点坐标焦点,通俗的说就是渐变的起点位置,此位置处颜色值保持最初状态(一般来说fx与fy会定义在渐变圆内,超出的话不同浏览器会有不同处理)
  • 定义方向
  • 关键点位置和颜色
  • gradientUnits
  • 焦点位置

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>径向渐变</title>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 500" width="250" height="700" preserveAspectRatio="xMinYMin meet">
        <!--defs用来定义某些元素,但不在实际世界中展示,使用进行引用即可-->
        <defs>
            <radialGradient id="grad1" cx="0.5" cy="0.5" r="0.45" fx="0.4" fy="0.3">
                <stop offset="0" stop-color="#1497FC"></stop>
                <stop offset="0.5" stop-color="#A469BE"></stop>
                <stop offset="1" stop-color="#FF8C00"></stop>
            </radialGradient>
        </defs>
        <rect x="100" y="100" fill="url(#grad1)" width="200" height="200"></rect>
    </svg>
</body>
</html>

效果:
初识SVG(四)
当我们把焦点位置定义在渐变圆外时(更改这一行为<radialGradient id=“grad1” cx=“0.5” cy=“0.5” r=“0.2” fx=“0.9” fy=“0.6”>):
初识SVG(四)

3.3.笔刷

  • 绘制纹理
  • <pattern>标签
  • patternUnits和patternContentUnits
    • 上面两个属性都有以下两种取值,而patternUnits默认为userSpaceOnUse,patternContentUnits默认为objectBoundingBox
    • userSpaceOnUse: 使用百分比配置
    • objectBoundingBox: 使用宽高值配置

我们来看看不加patternUnits和patternContentUnits的效果。
代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>笔刷测试</title>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 500 600" width="800" height="500" preserveAspectRatio="xMinYMin meet">
    <defs>
        <pattern id="p1" x="0" y="0" width="0.2" height="0.2">
            <circle r="5" cx="10" cy="10" fill="red"></circle>
            <polygon points="30 10 60 50 0 50" fill="green"></polygon>
        </pattern>
    </defs>
    <rect x="100" y="100" width="500" height="300" fill="url(#p1)" stroke="blue"></rect>
</svg>
</body>
</html>

效果图:
初识SVG(四)

相关标签: # SVG