HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述

HTML5之SVG 2D入门1 - SVG(可缩放矢量图形)概述

什么是SVG

SVG,全称Scalable Vector Graphics(可缩放矢量图形),是一种基于XML描述的二维图形格式。与位图(如JPEG和PNG)不同,SVG 是使用几何形状来描述图像,而不是像素阵列。这意味着 SVG 图像可以缩放到任何大小,而不会失去图像质量。

SVG基础语法

SVG 使用XML语法,图像由一系列形状(例如矩形、圆圈、路径等)组成。以下是一个简单的SVG例子:

<svg width="100" height="100">
  <circle cx="50" cy="50" r="40" fill="red" />
</svg>

这个代码创建了一个宽高为100像素的SVG画布,并在中心绘制了一个红色的圆。

SVG形状和属性

SVG形状包括矩形、圆、椭圆、线、折线、路径等等。每个形状都可以有各种各样的属性来控制它们的外观和位置。例如,circle元素有cx、cy和r属性表示圆心坐标和半径。

以下是一些常用形状:

  • 矩形
<rect x="0" y="0" width="100" height="100" fill="blue" />
  • 圆形
<circle cx="50" cy="50" r="40" fill="red" />
  • 椭圆形
<ellipse cx="60" cy="60" rx="40" ry="20" fill="green" />
  • 直线
<line x1="0" y1="0" x2="100" y2="100" stroke="black" stroke-width="2" />
  • 多边形
<polygon points="50,0 100,50 50,100 0,50" fill="orange" />
  • 路径
<path d="M100 100 L200 100 L150 200 Z" fill="none" stroke="black" />

SVG图形描边和填充

SVG图形可以通过描边和填充来定义外观,描边和填充可以是颜色、渐变或图案等。

以下是一些常用属性:

  • fill:定义形状内部的填充颜色或图案。
  • fill-opacity:定义填充透明度。
  • stroke:定义形状描边颜色或图案,一般与stroke-width配合使用。
  • stroke-width:定义描边宽度。

以下是一个例子,展示了一个带有黄色填充和黑色描边的三角形:

<svg width="100" height="100">
  <path d="M 10 90 L 50 10 L 90 90 Z" fill="yellow" stroke="black" stroke-width="2"/>
</svg>

SVG渐变

SVG渐变可以让我们在形状内使用过渡颜色,可以是线性渐变或径向渐变。

以下是一个线性渐变的例子:

<svg width="200" height="200">
  <defs>
    <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" style="stop-color:rgb(255,255,0);stop-opacity:1" />
      <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
    </linearGradient>
  </defs>
  <ellipse cx="100" cy="100" rx="80" ry="50" fill="url(#grad1)" />
</svg>

我们首先定义了一个带有两个颜色停止的线性渐变。然后我们在圆形内部使用该渐变做填充。

SVG动画

SVG支持各种动画效果,可以通过CSS动画、SMIL动画和JavaScript控制等方式实现。

以下是一个简单的CSS动画,将一个圆形从红色变成蓝色:

<svg width="120" height="120">
  <circle cx="60" cy="60" r="50">
    <animate 
      attributeName="fill" 
      values="red;blue" 
      dur="1s" 
      repeatCount="indefinite" 
    />
  </circle>
</svg>

其中,animate元素通过修改fill属性的值,实现了从红色到蓝色的渐变效果。

示例1

下面展示一个简单的SVG图表,它用圆形表示两项数据的占比,圆形的大小表示数据量的大小。其中使用渐变表示数据的颜色,使用title元素表示数据的含义。

<svg viewBox="0 0 100 100">
  <defs>
    <linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
      <stop offset="0%" style="stop-color:rgb(34,255,0);stop-opacity:1" />
      <stop offset="100%" style="stop-color:rgb(255,0,0);stop-opacity:1" />
    </linearGradient>
  </defs>
  <circle cx="30" cy="50" r="20" fill="url(#grad1)">
    <title>数据1: 60%</title>
  </circle>
  <circle cx="70" cy="50" r="40" fill="url(#grad1)">
    <title>数据2: 40%</title>
  </circle>
</svg>

示例2

下面展示一个SVG动画,它用圆形表示太阳系统的各个行星。每个行星绕太阳旋转,同时它们自转的速度也不同。其中太阳用红色的圆形表示。

<svg viewBox="0 0 400 400">
  <circle cx="200" cy="200" r="20" fill="red" />
  <g>
    <circle cx="200" cy="60" r="10" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 200 60"
                        dur="10s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 60"
                        to="360 200 60"
                        dur="5s"
                        repeatCount="indefinite" />
    </circle>
    <circle cx="240" cy="90" r="12" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 240 90"
                        dur="15s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 240 90"
                        to="360 240 90"
                        dur="8s"
                        repeatCount="indefinite" />
    </circle>
    <circle cx="270" cy="150" r="15" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 270 150"
                        dur="20s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 270 150"
                        to="360 270 150"
                        dur="10s"
                        repeatCount="indefinite" />
    </circle>
    <circle cx="200" cy="200" r="18" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 200 200"
                        dur="25s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 200 200"
                        dur="15s"
                        repeatCount="indefinite" />
    </circle>
    <circle cx="120" cy="230" r="14" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 120 230"
                        dur="30s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 120 230"
                        to="360 120 230"
                        dur="20s"
                        repeatCount="indefinite" />
    </circle>
    <circle cx="70" cy="290" r="17" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 70 290"
                        dur="35s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 70 290"
                        to="360 70 290"
                        dur="25s"
                        repeatCount="indefinite" />
    </circle>
    <circle cx="250" cy="310" r="16" fill="#D2D2D2">
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 200 200"
                        to="360 250 310"
                        dur="40s"
                        repeatCount="indefinite" />
      <animateTransform attributeName="transform"
                        type="rotate"
                        from="0 250 310"
                        to="360 250 310"
                        dur="30s"
                        repeatCount="indefinite" />
    </circle>
  </g>
</svg>

可以看到,使用SVG,我们能够轻松的创建出各种矢量图形,并可以通过CSS、JavaScript或SMIL实现各种交互和动画效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:HTML5之SVG 2D入门1—SVG(可缩放矢量图形)概述 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • php读取XML的常见方法实例总结

    让我来详细讲解一下 “php读取XML的常见方法实例总结”。 简介 XML(可扩展标记语言)是一种常见的用于存储和传输数据的标记语言。在PHP中,读取XML数据在很多应用中是很常见的需求。本文将介绍php读取XML的常见方法,并提供两个示例说明。 方法详解 1. 使用SimpleXML方法读取XML SimpleXML是一个用于解析XML数据的PHP扩展模块…

    html 2023年5月30日
    00
  • XML文件修改节点属性值(多种方法)

    下面是“XML文件修改节点属性值(多种方法)”的完整攻略: 一、背景介绍 在开发过程中,我们经常需要对XML文件进行修改。而对于XML文件的修改操作,其中最为常用的操作就是对节点属性值进行修改。那么在实际开发中,有哪些常用的方式可以对XML节点属性值进行修改呢? 二、 XML文件修改节点属性值 2.1 使用setAttribute方法 我们可以使用setAt…

    html 2023年5月30日
    00
  • 简介C#读取XML的两种方式

    针对“简介C#读取XML的两种方式”这个话题,我可以提供以下完整攻略: 简介C#读取XML的两种方式 XML是一种结构化的数据格式,可以通过c#程序进行读取和解析。下面将介绍两种使用C#读取XML的方式:使用XmlDocument和使用XDocument。 使用XmlDocument方式读取XML XmlDocument是C#中处理XML文档的一种常用方式,…

    html 2023年5月30日
    00
  • JSP开发导引

    JSP开发导引 JSP(Java Server Pages)是一种动态网页技术,使用JSP技术可以生成动态网页。下面是JSP开发的完整攻略: 步骤1:安装和配置Java环境 JSP需要在Java环境下运行,因此需要安装Java并配置Java环境变量。安装Java请参考官方文档。 步骤2:选择JSP开发工具 选择一款适合自己的JSP开发工具,常见的有Eclip…

    html 2023年5月30日
    00
  • 舞动你的文字 巧用html中marquee属性

    下面是关于“舞动你的文字 巧用html中marquee属性”的完整攻略: 1. 什么是marquee属性? <marquee> 是 HTMl 中的一种文本滚动的效果,通过使用 marquee 属性来实现。该属性被称为“跑马灯”效果,可以让文字、图片、音频等元素在网页上呈现动态效果。 2. marquee属性的语法 marquee属性常用的属性包括…

    html 2023年5月30日
    00
  • XML入门问答

    XML入门问答完整攻略 什么是XML? XML全称为Extensible Markup Language(可扩展标记语言),是一种文本格式化的语言。 XML有哪些特点? 自定义标签 XML与文本格式相同,易于阅读 支持多个语言之间的数据交换 XML有哪些用途? 作为配置文件 作为网络爬虫的数据存储格式 与Web服务配合使用 XML的基础语法格式是什么? XM…

    html 2023年5月30日
    00
  • Python实现的读取/更改/写入xml文件操作示例

    下面我来详细讲解“Python实现的读取/更改/写入xml文件操作示例”的完整攻略。 1. 什么是XML XML(Extensible Markup Language)是一种用于存储和传输数据的标记语言,它可以表示任何类型的数据,例如文本、图像、音频等等。XML 是一种类似于 HTML 的标记语言,但与 HTML 不同,它没有预定义的标签,而是可以根据需要定…

    html 2023年5月30日
    00
  • Nginx实现浏览器可实时查看访问日志的步骤详解

    以下是“Nginx实现浏览器可实时查看访问日志的步骤详解”的攻略。 步骤一:安装WebSocket模块 首先,我们需要在Nginx上安装WebSocket模块来实现实时查看访问日志的功能。WebSocket模块可以让我们建立与浏览器的长连接,从而实现实时推送日志信息到浏览器端。具体安装步骤如下: 打开Nginx的官网(https://nginx.org/)并…

    html 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部