前端SVG的学习

本文介绍了SVG的基本形状元素如矩形、圆形、椭圆、线、多边形和路径的使用,以及如何通过d属性描述路径和设置样式,包括填充、描边、透明度等。
摘要由CSDN通过智能技术生成

目标

  • 为了可以使用svg动画库,入门下svg
  • 学习笔记,个人记录,
  • 学习掘金大佬德育处主任
    • https://juejin.cn/user/2673620576140030

rect矩形

  • 矩形使用 <rect> 标签,默认填充色是黑色,当只设置宽高时,渲染出来的矩形就是黑色的矩形。

  • 矩形基础属性:

    • x: 左上角x轴坐标

    • y: 左上角y轴坐标

    • width: 宽度

    • height: 高度

    • rx: 圆角,x轴的半径

    • ry: 圆角,y轴的半径

  • 通过 xy 可以设置矩形位置

    • 以图像左上角为起点进行移动

  • rx,ry如果只设置了一个的值,另一个值默认相同

  • 当rect的宽度高度相同并且rx值为宽度一半的时候,就是一个圆形了

  <svg width="300" height="300" style="border: 1px solid red;">
    <rect 
      width="100" 
      height="100"
      rx="50"
    ></rect>
  </svg>

圆circle

圆形使用 <circle> 标签,基础属性有:

  • cx: 圆心在x轴的坐标
  • cy: 圆心在y轴的坐标
  • r: 半径
  • cx,cy都设置为0
  <svg width="300" height="300" style="border: 1px solid red;">
    <circle cx="0" cy="0" r="50"></circle>
  </svg>

ellipse椭圆

椭圆使用 <ellipse> 标签,基础属性有:

  • cx: 圆心在x轴的坐标
  • cy: 圆心在y轴的坐标
  • rx: x轴的半径
  • ry: y轴的半径
  • <ellipse><circle> 差不多,只是将半径拆成x轴和y轴的。

line线条

很好理解,点组成了线,所以就需要2点的坐标去组成线

直线使用 <line> 标签,基础属性有:

  • x1: 起始点x坐标
  • y1: 起始点y坐标
  • x2: 结束点x坐标
  • y2: 结束点y坐标
  • stroke: 描边颜色
  • 只有 x1x2 ,没有 x3 ,也没有 y3
  • 需要注意的是,<line> 需要使用设置 stroke 属性才会有绘制效果。
  <svg width="300" height="300" style="border: 1px solid red;">
    <line
      x1="0"
      y1="0"
      x2="100"
      y2="100"
      stroke="black"
    ></line>
  </svg>

polyline折线

使用 <polyline> 可以绘制折线,基础属性有:

  • points点集(多个坐标点,可用逗号分隔,也可以不用)
  • stroke描边颜色
  • fill填充颜色
    • fill 默认值是黑色,不设置fillnone会自动闭合线条进行填充(前提设置了stroke颜色值)
  <svg width="300" height="300" style="border: 1px solid red;">
    <polyline
      //效果相同points="10 10, 200 80, 230 230"
      points="10 10 200 80 230 230"
      stroke="blue"
      fill="none"
    >
    </polyline>
  </svg>
  • 很好理解,从(10,10)出发,到(200,80),再从(200,80)到(230,230) (坐标系)

多边形polygon

多边形使用 <polygon> 标签,基础属性和 <polyline> 差不多:

  • points: 点集
  • stroke: 描边颜色
  • fill: 填充颜色
    • <polygon> 会自动闭合(自动将起始点和结束点链接起来)。
  <svg width="300" height="300" style="border: 1px solid red;">
    <polygon
      points="10 10 200 80 230 230"
      stroke="blue"
      fill="none"
    ></polygon>
  </svg>

path直线路径

其实在 SVG 里,所有基本图形都是 <path> 的简写。所有描述轮廓的数据都放在 d 属性里,ddata 的简写。

d 属性又包括以下主要的关键字(注意大小写!):

  • M: 起始点坐标,moveto 的意思。每个路径都必须以 M 开始。M 传入 xy 坐标,用逗号或者空格隔开。
  • L: 轮廓坐标,lineto 的意思。L 是跟在 M 后面的。它也是可以传入一个或多个坐标。大写的 L 是一个绝对位置
  • l: 这是小写 L,和 L 的作用差不多,但 l 是一个相对位置
  • H: 和上一个点的Y坐标相等,是 horizontal lineto 的意思。它是一个绝对位置
  • h: 和 H 差不多,但 h 使用的是相对定位
  • V: 和上一个点的X坐标相等,是vertical lineto 的意思。它是一个绝对位置
  • v: 这是一个小写的 v ,和大写 V 的差不多,但小写 v 是一个相对定位。
  • Z: 关闭当前路径,closepath 的意思。它会绘制一条直线回到当前子路径的起点。
  <svg width="300" height="300" style="border: 1px solid red;">
    <path
      d="M 10 10 L 100 10 L 100 300"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>

如果全是使用大写 L 来描述每个点的位置,那可以把 L 也去掉,直接写点集,上面svg等同于下面
  <svg width="300" height="300" style="border: 1px solid red;">
    <path
      d="M 10 10 100 10 100 300"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>

你也可以添加逗号分隔下坐标,效果也是一样的
  <svg width="300" height="300" style="border: 1px solid red;">
    <path
      d="M 10 10, 100 10, 100 300"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>

  • 步骤,画笔落在坐标轴(10,10),绘制(10,10)到(100,10)的线条,再绘制(100,10)到(100,300)的线条

Z(闭合路径)

  • d 的数据集里,使用 Z 可以闭合路径。

  • 注意要大写

  <svg width="300" height="300" style="border: 1px solid red;">
    <path
      d="M 10 10 L 100 10 L 100 300 Z"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>

l(轮廓坐标相对位置)

  • 使用 L 的小写方式 l 可以实现相对位置写法。
    • l 里的参数会与前一个点的 xy 进行相加,得到一个新的坐标。
    • 公式
    • 后一个坐标 = (前一个x坐标 + 现在x坐标,前一个y坐标 +现在y坐标)
  • **也就是我从你这个位置出发,再次走多少距离,**而不是想绝对位置一样告诉你到哪里
  <svg width="300" height="300" style="border: 1px solid red;">
    <path
      d="M 10 10 l 90 0 l -10 300 Z"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>
  • d="M 10 10 l 90 0 l -10 300 Z"等同于M 10 10 L 100 10 L 100 300 Z

H和h(y轴绝对和相对)

  • H 后面只需传入 X坐标 即可,它的 Y坐标 与前一个点相同。
    • 不能写反了,必须要先H,在写入X坐标
  <svg width="310" height="300" style="border: 1px solid red;">
    <!-- 等同于d="M 10 0 L 100 0  Z"
        (10,0) 到 (300,0)
    -->
    <path
      d="M 10 0 H 300 Z"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>
  • 上面的代码中,d="M 10 10 H 100" 等同于 d="M 10 10 L 100 10"

  • h和小l作用差不多,都是从我这里开始出发,要走多少距离的意思
    • h传入的数据会和前一个点的 X坐标 相加
    • 公式
    • 后一个坐标 = (前一个x坐标 + 现在x坐标,前一个y坐标)
    • 相对谁,谁就不变
 //这里把width设置称为了310
<svg width="310" height="300" style="border: 1px solid red;">
    <!-- 等同于d="M 10 0 L 100 0  Z"
        (10,0) 到 (300,0)
    -->
    <path
      d="M 10 0 H 300  Z"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>
  <svg width="310" height="300" style="border: 1px solid red;">
    <!-- 
      坐标计算
      (10,0) 到 (290 + 10,0)
    -->
    <path
      d="M 10 0 h 290 Z"
      stroke="blue"
      fill="none"
    >
    </path>
  </svg>

V和v(x轴绝对和相对)

  • V 后面只需传入 Y坐标 即可,它的 X坐标 与前一个点相同。
    • 公式
    • 后一个坐标 = (前一个x坐标,现在的y坐标)
<svg width="300" height="300" style="border: 1px solid red;">
  <path
    d="M 10 10 V 100"
    stroke="blue"
    fill="none"
  >
  </path>
</svg>
  • d="M 10 10 V 100"等同于d = "M 10 10 10 100"

  • vV 的作用差不多,小写 v 是一个相对位置。
    • 后一个坐标 = ( 现在x坐标,前一个y坐标 + 现在y坐标)
    • 相对谁,谁就不变

容易搞混怎么办?

  • 记住H相对于Y轴,V相当与X轴
  • 然后对应小写则是相加(减)与之相对坐标相反的,其他不用变
    • 比如小写h,大写的H是相对于Y轴,那么小写h计算坐标的时候就不要动y轴了,只变化x轴
    • 比如小写v,只需要变动y轴,x轴和他没关系,始终不变
  • 相对谁,谁就不变

椭圆弧公式

  • 用Illustrator去做

SVG 中可以使用 path 配合 A属性 绘制椭圆弧。

A(rx, ry, xr, laf, sf, x, y)
  • rx: 椭圆X轴半径
  • ry: 椭圆Y轴半径
  • xr: 椭圆旋转角度
  • laf: 是否选择弧长较长的那一段。0: 短边(小于180度); 1: 长边(大于等于180度)
  • sf: 是否顺时针绘制。0: 逆时针; 1: 顺时针
  • x: 终点X轴坐标
  • y: 终点Y轴坐标

设置样式的方法

设置 SVG 元素样式其实和 CSS 差不多,常见的方法有4种。

  • 属性样式
  • 内联样式
  • 内部样式
  • 外部样式

属性样式

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    fill="pink"
  />
</svg>

内联样式

把所有样式写在 style 属性里

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    style="fill: pink;"
  />
</svg>

内部样式

将样式写在 <style> 标签里,为标签添加类名或者其他,通过选择器进行样式更改

<style>
  .rect {
    fill: pink;
  }
</style>

<svg width="400" height="400" style="border: 1px solid red;">
  <rect
    x="100"
    y="100"
    width="200"
    height="100"
    class="rect"
  />
</svg>

外部样式

  • 将样式写在 .css 文件里,然后在页面中引入该 CSS 文件。

常用的属性

  • 接下来讲到的所有常规属性,除了在元素属性上设置之外,都支持在 CSS 中设置。
  • fill填充颜色
  • fill-opacity填充透明度
    • 取值是 0 - 10 代表完全透明,1 代表完全不透明。小于 0 的值会被改为 0,大于 1 的值会被改为 1
  • stroke描边颜色
  • stroke-opacity描边的不透明度
  • stroke-width描边的宽度
  • stroke-dasharray虚线描边
  • stroke-dashoffset虚线偏移量
  • stroke-linecap线帽
    • butt: 平头(默认值)
    • round: 圆头
    • square: 方头

stroke-linecap

  • stroke-linejoin拐角
    • 拐角就是折线的交接点,可以使用 stroke-linejoin 设置,它接收以下属性:
    • miter: 尖角(默认)
    • round: 圆角
    • bevel: 平角

stroke-linejoin

  • shape-rendering消除锯齿

如果你觉得 SVG 在浏览器显示出来的图像有点模糊,那可能是开启了 反锯齿 功能,可以通过 CSS 属性关闭该功能。

shape-rendering: crispEdges;

将该属性设置到对应的 svg 元素上,就会关闭反锯齿功能,突显看起来就会清晰很对,但在某些情况关闭了该功能会让图像看起来有点毛躁的感觉。

如果想开启反锯齿功能,可以这样设置:shape-rendering: geometricPrecision;

text(渲染文本)

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Web前端开发需要学习以下知识: 1. HTML:HTML是用来描述网页内容的语言,包括文本、图像、视频等。 2. CSS:CSS是用来控制网页布局和样式的语言,包括颜色、字体、大小等。 3. JavaScript:JavaScript是用来控制网页行为的脚本语言,包括交互、动画、数据处理等。 4. 网络基础知识:了解网络基本概念,如 IP 地址、 HTTP 协议、浏览器等。 5. 响应式设计:学习如何让网页在不同设备上都能够很好的呈现。 6. 数据库基础知识:了解数据库的基本概念,如表、字段、索引等,以及如何使用 SQL 语言操作数据库。 7. 前端框架:学习使用前端框架,如 React、Vue、Angular 等,可以更快速、高效地开发网页。 以上知识点是 web 前端开发的基本要点,要想成为一名优秀的 web 前端开发人员,还需要不断学习新的技术和工具,保持自己的技术能力更新。 ### 回答2: Web前端开发是指利用HTML、CSS、JavaScript等技术开发和维护网站或网页的过程。要成为一名合格的web前端开发人员需要掌握以下几个方面的知识: 1. HTML:学习HTML(超文本标记语言)是web前端开发的基础。了解HTML标签的语义和用法,如何构建网页的结构。 2. CSS:掌握CSS(层叠样式表)是创建和控制网页样式的关键。学会使用CSS选择器、样式属性和属性值来设计和布局网页。 3. JavaScript:学习JavaScript是开发交互式和动态网页的基础。掌握JavaScript语法、DOM(文档对象模型)操作和事件处理等知识,实现更丰富的用户体验。 4. 响应式设计:了解响应式设计的原理和方法,使网页能自适应不同尺寸和设备的屏幕,提供更好的用户体验。 5. 浏览器兼容性:了解不同浏览器的特性和兼容性问题,确保网页能在各种主流浏览器中正确显示和运行。 6. 版本管理工具:学会使用版本管理工具如Git,能有效地管理代码和团队协作。 7. 调试和测试工具:掌握调试工具如浏览器的开发者工具,以及编写和运行测试用例进行代码检测和调试。 8. 前端框架和库:熟悉常用的前端框架和库如React、Vue和jQuery等,能利用其提供的功能和组件进行更高效的开发。 9. SEO优化:了解搜索引擎优化(SEO)的基本原理和技巧,使网页更容易被搜索引擎收录和排名。 10. 用户体验设计:了解用户体验设计的基本原则,提供易用、易懂和愉悦的用户体验。 以上是web前端开发需要学习的基本知识与技能,当然随着技术的不断发展和变化,还需要持续学习和更新自己的知识。 ### 回答3: Web前端开发是指开发和管理网站的用户界面,需要掌握一系列的知识和技能。以下是学习Web前端开发所需的主要知识: 1. HTML和CSS:HTML是超文本标记语言,用于构建网页的结构和内容。CSS是层叠样式表,用于控制网页的样式和布局。学习HTML和CSS是Web前端开发的基础。 2. JavaScript:JavaScript是一种脚本语言,用于给网页添加交互和动态效果。学习JavaScript可以掌握网页的事件处理、DOM操作和前端框架等技术。 3. 前端框架:掌握一些流行的前端框架可以提高开发效率和代码质量,如React、Vue和Angular等。这些框架提供了丰富的组件和工具,方便开发响应式和可复用的界面。 4. 后端基础:了解一些后端的基础知识,如HTTP协议、数据传输和服务器端语言。这有助于与后端开发人员进行沟通和协作,实现前后端数据的交互。 5. 跨平台和响应式设计:现代Web应用程序需要在多种设备和平台上运行,学习如何开发适应不同屏幕尺寸和分辨率的响应式设计是必要的。 6. 图形和动画:掌握一些图形和动画的知识可以提升用户体验,如SVG、Canvas和CSS动画等。 7. 浏览器兼容性和性能优化:不同浏览器对网页的渲染和执行会有差异,学习如何解决兼容性问题和优化网页性能是重要的。 总之,Web前端开发需要学习HTML、CSS、JavaScript等基础知识,掌握前端框架、响应式设计、图形和动画,以及浏览器兼容性和性能优化等高级技术。不断学习和实践是成功成为一名优秀的Web前端开发人员的关键。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未成年梦想

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值