2023-12-19_SVG初步入门

SVG介绍

  • SVG,即可缩放矢量图形(Scalable Vector Graphics),是一种 XML 应用,可以以一种简洁、可移植的形式表示图形信息
  • SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失

1.SVG 文档基本结构

  • 可以把如下内容保存文一个svg文件,然后用浏览器打开,也可以放置在html文档的任何位置
<?xml version="1.0" encoding="UTF-8"?>
<svg width='140' heiight='170' xmlns='http://wwww.w3.org/2000/svg'>
  <title>Cat</title>
  <desc>Stick Figure of Cat</desc>
  <!-- 在这里绘制图像 -->
</svg>
<html>
<head></head>
<body>
    <svg width='140' heiight='170' xmlns='http://wwww.w3.org/2000/svg'>
    </svg>
</body>
</html>

2.基本属性

2.1 fill

  • 填充属性,封闭曲线填充颜色
fill='none'
fill='#333993'

2.2 stroke,stroke-width

  • 线条颜色和宽度
stroke='black' stroke-width='2'

3.几个注意点

  • svg的坐标原点在左上角,水平为x轴,垂直为y轴
  • 默认填充为黑色,边框为白色
  • 基本属性的颜色可以用black等颜色关键词也可以用6位rgb已经3位rgb码
  • 圆形宽度等是不包括边框的大小的。所以圆形的大小是是圆形的半径+2个边框的宽度。矩形类似。

4.基本图形

4.1 圆形

<circle cx='70' cy='95' r='50' stroke='black' fill='none'></circle>

4.2 线段

<line x1='75' y1='95' x2='135' y2='85' stroke='black' />

4.3 矩形

  • 其中的rx和ry用来表示矩形的弯角


    image.png
<rect x='50' y='10' width='30' height='50' rx='2' ry='2' stroke='black' fill='none'/>

4.4 多边形

  • 指定的points个数必须为偶数,会都在返回到原始坐标
<polygon points='15,10 55,10 45,20 5,20' style='fill:red; stroke: black;' />

4.5 折线

  • 指定的points个数必须为偶数,不会返回到原始坐标
  • stroke-width:3用来指定线宽
<polyline  points='15,10 55,10 45,20 5,20' style='fill:none; stroke: black;' />
<style="fill:none;stroke:black;stroke-width:3" />

4.6 文本

  • 用来绘制一个文本,需要指定文本的位置
  • 可以指定文本是否加粗、字体等
  • 可以带有a元素也可以不带
<a xlink:href="//www.w3cschool.cc/svg/" target="_blank">
  <text x="60" y="165" fill='red' font-size='20'>Cat</text>
</a>

4.7 分组和引用

  • 使用defs元素
  • SVG规范推荐我们将所有想要复用的对象放置在元素内,这样SVG阅读器进入流式环境中就能更轻松地处理数据
  • 由于组合在<defs>元素内,它们不会立刻绘制到屏幕上,而是作为"模板"供其他地方使用。
  • defs元素里面定义的模板元素的坐标是相对于原点来绘制。引用的时候需要指定的x和y。可以理解为原点的偏移量,在该点进行绘制图形。
<svg width='240' height='240' viewBox='0 0 240 240' xmlns='http://wwww.w3.org/2000/svg'>
  <defs>
    <g id='house' style='stroke:black'>
      <desc>房子</desc>
      <rect x='0' y='41' width='60' height='60' />
      <polyline points='0 41, 30 0, 60 41' />
      <polyline points='30 110, 30 71, 44 71, 44 101' />
    </g>
  </defs>
  <use xlink:href='#house' x='0' y='0' style='fill:#cfc'/>
  <use xlink:href='#house' x='120' y='0' style='fill:#99f' />
</svg>

5.变换

  • 注意 多个变换可以合并成一个

5.1 平移

  • 是全部点都跟着平移,数值可以为负数
<rect x='50' y='10' width='30' height='50' stroke='black' fill='none'/>
<rect x='50' y='10' width='30' height='50' stroke='black' fill='none' transform='translate(140 0)'/>

5.2 缩放

  • 是全部点都跟着缩放,包括图形的起始坐标也会跟着缩放。数值可以为负数
<rect x='50' y='10' width='30' height='50' stroke='black' fill='none'/>
<rect x='50' y='10' width='30' height='50' stroke='black' fill='none' transform='scale(2,1)'/>

5.3 旋转

  • 是全部点都跟着原点旋转指定角度
<rect x='50' y='10' width='30' height='50' stroke='black' fill='none'/>
<rect x='50' y='10' width='30' height='50' stroke='black' fill='none' transform='rotate(15)'/>

6. 如何实现多行文本,文本垂直排列

6.1 文本垂直排列

  • 添加属性writing-mode='tb'即可。如果这个属性放空,则为水平排列
<text x='1980' y='720' fill='red' font-size='60' writing-mode='tb'>Hello World!!</text>

6.2 多行文本方法1

  • 垂直方向的多行文本需要修改为y和dx属性
<svg>
  <text x="50" y="50">
    <tspan x="50" dy="1.2em">第一行文本</tspan>
    <tspan x="50" dy="1.2em">第二行文本</tspan>
    <tspan x="50" dy="1.2em">第三行文本</tspan>
  </text>
</svg>

6.3 多行文本方法2

  • 注意,必须给出名称空间声明,并且需要编写有效的XHML才能使其正常工作。
  • 此外,foreignObject是SVG上下文的一部分,因此需要设置width和height,否则它将没有固有的大小。
<svg xmlns="http://www.w3.org/2000/svg"
     width="21cm" height="29.7cm" style="border:1px solid black;">
  <foreignObject x="6.4cm" y="3.6cm" width="10cm" height="10cm">
    <p xmlns="http://www.w3.org/1999/xhtml" 
       style="font-size:48px;">The paragraph here</p>
  </foreignObject>
</svg

参考文章

  1. SVG 入门指南(看完,对SVG结构不在陌生)
  2. SVG 教程
  3. 如何在svg中添加多行文本(段落)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容

  • 概念 SVG全称是可缩放矢量图(Scalable Vector Graphics),是一种基于XML语法,用于描述...
    belllee阅读 1,041评论 0 0
  • 作者: 阮一峰www.ruanyifeng.com/blog/2018/08/svg.html 一、概述 SVG ...
    grain先森阅读 2,797评论 0 12
  • 一、概述 SVG 是一种基于 XML 语法的图像格式,全称是可缩放矢量图(Scalable Vector Grap...
    CRUD_科科阅读 622评论 0 1
  • 一、栅格图形和矢量图形栅格图形:也称位图,图像由一组二维像素网格表示。Canvas 2d API 就是一款栅格图形...
    linda102阅读 1,130评论 0 4
  • @(HTML5)[canvas与SVG] [TOC] 十一 、SVG HTML体系中,最常用的绘制矢量图的技术是S...
    踏浪free阅读 4,566评论 0 2