# SVG学习笔记
# 1.1 svg简介-使用方式
- 浏览器直接打开
- 在HTML中使用img标签引用
- 直接在HTML中使用SVG标签
- 作为CSS背景
# 1.2 基本图形和属性
- 基本图形
rect(矩形)、circle(圆形)、elipse(椭圆)、line(直线)、polyline(折线)、polygon(多边形) - 基本属性
fill、stroke、stroke-width、transform
# 1.2.1 rect属性
x、y、width、height、rx、ry
# 1.2.2 circle属性
cx、cy、r
# 1.2.2 elipse属性
cx、cy、rx、ry
# 1.2.3 line属性
x1、x2、y1、y2
# 1.2.4 填充、描边和变换
fill、stroke、stroke-width、transform
# 1.3 基本操作API
- 创建图形
document.createElementNS(ns,tagName) - 添加图形 element.appendChild(childElement)
- 设置/获取属性 element.setAttribute(name,value) element.getAttribute(name)
# 2.1 SVG的世界、视野、视窗的概念
- width,height-控制视窗
- svg代码-定义世界
- viewBox,preserveAspectRatio-控制视野
# 2.2 SVG中的图形分组
标签来创建分组 - 属性继承
- transform属性定义坐标变换
- 可以嵌套使用
# 2.3 坐标系统概述
- 笛卡尔直角坐标系
- 原点
- 互相垂直的两条数轴
- 角度定义
# 2.4 四个坐标系
- 用户坐标系
- 世界的坐标系
- 自身坐标系
- 每个图形元素或分组独立与生俱来
- 前驱坐标系
- 父容器的坐标系
- 参考坐标系
- 使用其他坐标系来考究自身的情况时使用
# 2.5 坐标变换
# 2.5.1 坐标变换定义
- svg中,[坐标变换]是对一个坐标系到另一个坐标系的变换的描述
# 3.1 认识RGB和HSL
# 3.2 渐变
- 让图形更丰满
- 线性渐变和径向渐变
# 3.2.1 线性渐变
和 - 定义方向
- 关键点位置及颜色
- gradientUnits
# 3.2.2 径向渐变
和 - 定义方向
- 关键点位置及颜色gradientUnits
- 焦点位置
# 3.3 笔刷
- 绘制纹理
标签 - patternUnits和patternContentUnits
# 4.1 Path概述
- 强大的绘图工具
- 规范 https://www.w3.org/TR/SVG11/paths.html
# 4.1.1 Path概述-Path字符串
<path d="M0,0L10,20C30-10,40,20,100,100" strole="red">
# 4.1.2 Path概述-命令基本规律
- 区分大小写:大写表示坐标参数为绝对位置,小写则为相对位置
- 最后的参数表示最终要到达的位置
- 上一个命令结束的位置就是下一个命令开始的位置
- 命令可以重复参数表示重复执行同一条命令
# 4.2 移动和直线命令
- M(x,y)+ 移动画笔,后面如果有重复参数,会当做是L命令处理
- L(x,y)+ 绘制直线到指定位置
- H(x)+ 绘制水平线到指定的x位置
- V(y)+ 绘制竖直线到指定的y位置
- m、l、h、v使用相对位置绘制
# 问题
# svg作为background引入时如何修改颜色?
当使用data url引入时做为静态文件无法进行修改,除非把svg嵌入到URL中,并修改fill
.field__search::before {
content: "";
position: absolute;
top: 8px;
left: 8px;
width: 22px;
height: 22px;
background-image: url("data:image/svg+xml;utf8, <svg xmlns='http://www.w3.org/2000/svg' width='16.687' height='16.688' viewBox='0 0 16.687 16.688'><path class='cls-1' d='M931.155,40.747H930.4l-0.264-.261a6.212,6.212,0,1,0-.675.675l0.263,0.262v0.755l4.773,4.76,1.423-1.422Zm-5.731,0a4.291,4.291,0,1,1,4.3-4.291A4.294,4.294,0,0,1,925.424,40.747Z' transform='translate(-919.219 -30.25)' fill='#fff' /></svg>");
background-repeat: no-repeat;
background-position: 0 0;
opacity: 1;
}
或者另一个解决办法就是修改html结构,直接使用svg