热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

前端提高篇(七十):SVG基本使用、基本样式、路径path

SVG是使用XML来描述二维图形和绘图程序的语言。SVG遵循的是xml的规范,与html5的使用有所区别SVG绘制出来的是矢量图,放大之后不会失真官方文

SVG 是使用 XML 来描述二维图形和绘图程序的语言。
SVG遵循的是xml的规范,与html5的使用有所区别
SVG绘制出来的是矢量图,放大之后不会失真
官方文档链接

应用场景:
1.图形(脑图)
2.图标、logo(矢量图)
3.动效

发展简史及支持情况
1.在2003年,SVG1.1被确立为W3C标准
2.firefox、IE9+、chrome、safari均支持

使用:
html:

<svg width&#61;&#39;500px&#39; height&#61;&#39;500px&#39; xmlns&#61;"http://www.w3.org/2000/svg" version&#61;"1.1">svg>

js&#xff1a;

var char &#61; "http://www.w3.org/2000/svg";
var svg &#61; document.createElementNS(char, &#39;svg&#39;);

SVG元素对象一般通过调用setAttribute()方法来设定属性值

基础元素&#xff1a;


<line x1&#61;&#39;100&#39; y1&#61;&#39;100&#39; x2&#61;&#39;200&#39; y2&#61;&#39;100&#39; stroke&#61;&#39;red&#39;>line>

<rect x&#61;&#39;100&#39; y&#61;&#39;100&#39; width&#61;&#39;100&#39; height&#61;&#39;100&#39; rx&#61;&#39;20&#39; ry&#61;&#39;20&#39;>rect>

<circle cx&#61;&#39;100&#39; cy&#61;&#39;100&#39; r&#61;&#39;50&#39; fill&#61;&#39;green&#39;>circle>

<ellipse rx&#61;&#39;100&#39; ry&#61;&#39;50&#39; cx&#61;&#39;250&#39; cy&#61;&#39;100&#39;>ellipse>

<polygon points&#61;&#39;100 100,70 150,130 150&#39;>polygon>

<polyline points&#61;&#39;0 100,100 35,200 150,300 75,400 150,500 20&#39;>polyline>

<text x&#61;&#39;300&#39; y&#61;&#39;300&#39;>学习text>

元素的属性名是固定的&#xff0c;不可随意改动&#xff1b;但可以直接写在dom上&#xff0c;不用另外写在css文件里&#xff0c;或内部样式表&#xff0c;如fill&#xff0c;stroke&#xff0c;width&#xff0c;height等等
fill-opacity&#xff1a;填充透明度
stroke-opacity&#xff1a;描边透明度

1.默认画的元素都会填充成黑色&#xff0c;想改颜色用fill&#xff0c;但画直线时&#xff0c;没有可以填充的地方&#xff0c;显示不出来&#xff0c;所以需要单独设置stroke颜色才能看见

svg {border: 1px solid #000;
}
line {stroke: red;
}

<svg width&#61;&#39;500&#39; height&#61;&#39;500&#39; xmlns&#61;"http://www.w3.org/2000/svg" version&#61;"1.1"><line x1&#61;&#39;100&#39; y1&#61;&#39;100&#39; x2&#61;&#39;200&#39; y2&#61;&#39;100&#39;>line>
svg>

效果就是一条红色的线

2.线宽stroke-width是有写px的&#xff0c;不是相对大小
一个椭圆&#xff0c;以透明填充&#xff0c;描边用橘色&#xff0c;线宽20px&#xff1a;

ellipse {stroke: orange;fill: transparent;stroke-width: 20px;
}

3.画折线时&#xff0c;由于默认会填充&#xff0c;所以会把第一个点和最后一个点连起来&#xff0c;然后填充成黑色&#xff0c;就像多边形一样

<polyline points&#61;&#39;0 100,100 35,200 150,300 75,400 150,500 20&#39;>polyline>

在这里插入图片描述
把填充色改成透明色看看原来折线的样子

polyline {stroke: red;fill: transparent;
}

在这里插入图片描述

4.文字也能添加样式

text {stroke: red;font-size:20px;stroke-width:3px;
}

<text x&#61;&#39;300&#39; y&#61;&#39;300&#39;>学习text>

在这里插入图片描述

基础样式
1.fill: transparent;
2.stroke: red;
3.stroke-width: 10px;
4.stroke-opacity/fill-opacity: 0.5;
5.stroke-linecap: butt/round/square;
6.stroke-linejoin: bevel/round/miter;

与canvas的类似

路径

path 元素用于定义一个路径。
d: 定义路径指令
下面的命令可用于路径数据&#xff1a;M &#61; moveto移动到
L &#61; lineto画线到
H &#61; horizontal lineto水平线到&#xff08;后面加水平走多少&#xff0c;不是加坐标&#xff09;
V &#61; vertical lineto垂直线到&#xff08;后面加垂直走多少&#xff0c;不是加坐标&#xff09;
C &#61; curveto三次贝塞尔曲线到
S &#61; smooth curveto光滑三次贝塞尔曲线到
Q &#61; quadratic Bézier curve二次贝塞尔曲线到
T &#61; smooth quadratic Bézier curveto光滑二次贝塞尔曲线到
A &#61; elliptical Arc椭圆弧 A 70 120 0 1 1 150 200
Z &#61; closepath关闭路径(连接起点和终点&#xff0c;不分大小写)
注意&#xff1a;以上所有命令均允许小写字母。大写表示绝对定位&#xff08;对于svg&#xff09;&#xff0c;小写表示相对定位&#xff08;相对前面那个路径&#xff09;。

在这里插入图片描述

VvHh的使用

<path d&#61;&#39;M 100 100 v 100 h 100&#39;>path>

从svg的(100,100)处垂直走100&#xff0c;再水平走100&#xff0c;水平走的方向根据写的数值和大小写Hh来控制
在这里插入图片描述
如果写成&#xff1a;

<path d&#61;&#39;M 100 100 V 100 H 100&#39;>path>

就相当于还是一个点&#xff0c;画笔移动到svg(100,100)处&#xff0c;V代表svg垂直方向100处&#xff0c;还是这个点&#xff0c;H代表水平方向100处&#xff0c;也还是这个点&#xff0c;所以不会有画线&#xff0c;需要用小写的v和h

L使用&#xff1a;画多段直线&#xff1a;

<path d&#61;&#39;M 100 100 L 200 100, 200 200,100 200,100 150&#39;>path>

在这里插入图片描述
可以一直lineTo下去

有svg的在线编辑器&#xff0c;可以方便地画图形&#xff0c;然后保存成svg文件&#xff0c;在ide中打开&#xff0c;就能看到对应的path
在线编辑器
随便画了个图
在这里插入图片描述
保存文件&#xff0c;在浏览器打开&#xff0c;就是图示的这样&#xff0c;在vscode打开&#xff0c;是这样的&#xff1a;
在这里插入图片描述
已经写好了对应的svg元素及属性

二次贝塞尔曲线&#xff1a;
M到起始点&#xff0c;Q后面跟控制点&#xff0c;最后写终止点

<path d&#61;&#39;M 100 100 Q 200 0 300 100&#39;>path>

在这里插入图片描述
关于A指令的使用&#xff1a;
这里有一篇很赞的文章&#xff0c;给出了详细的解释
在这里插入图片描述
A指令是不指定椭圆圆心的&#xff0c;指定起点和终点&#xff0c;经过这两个点的椭圆有2个&#xff0c;弧有4段&#xff0c;
如果A指令的第4个参数为1&#xff0c;代表选择大弧&#xff0c;即图中的1或者4&#xff1b;
如果第4个参数为0&#xff0c;代表选择小弧&#xff0c;即图中的2或者3&#xff1b;
如果第5个参数为1&#xff0c;代表选择从起点到终点顺时针的弧1&#xff1b;
如果第5个参数为0&#xff0c;代表选择从起点到终点逆时针的弧4

A 70 120 0 1 1 150 200的图&#xff1a;
在这里插入图片描述
如果指定的起点和终点刚好在轴上&#xff0c;画出的圆只有1个&#xff0c;可选择的弧只有2段

如果设定了旋转角度&#xff0c;是旋转完椭圆&#xff0c;与起点终点匹对位置&#xff0c;然后旋转弧段&#xff0c;不是在未旋转时选好弧段再旋转
在这里插入图片描述

<path d&#61;&#39;M 100 100 A 70 120 90 1 1 150 200&#39;>path>

在这里插入图片描述
关于path&#xff0c;这里还有一篇很赞的文章&#xff0c;可以参考


推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
author-avatar
张茂彪6
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有