svg基础(三)分组、渐变

上一篇文章简单介绍了svg常用标签及其属性,本篇主要介绍分组,渐变

1 分组<g>

分组容器

  • 添加到g元素上的变换会应用到其所有的子元素上
  • 添加到g元素的属性会被其所有的子元素继承
  • 定义复杂对象,可通过<use>元素引用

1.1 分组

<svg><g><line x1="20" y1="20" x2="80" y2="20" stroke="blue" /><rect x="20" y="30" height="40" width="60" stroke="blue" fill="red" /><text x="20" y="90" stroke="red" fill="red">svg基础</text></g>
</svg>

在这里插入图片描述

1.2 继承属性

 <svg><g stroke="blue"><line x1="20" y1="20" x2="80" y2="20" /><rect x="20" y="30" height="40" width="60" fill="red" /><text x="20" y="90" stroke="red" fill="red">svg基础</text></g>
</svg>

在这里插入图片描述

1.3 应用变换

<svg><g stroke="blue" transform="rotate(30,50,50)"><line x1="20" y1="20" x2="80" y2="20" /><rect x="20" y="30" height="40" width="60" fill="red" /><text x="20" y="90" stroke="red" fill="red">svg基础</text></g>
</svg>

在这里插入图片描述

可以看到,<g>元素中的所有形状如何围绕点50,50旋转30度

可以看到line和rect继承了g的stroke,而text应用的是自身的stroke

<g>标签没有X和Y属性,意味着不能通过更改x和y属性来移动其中的元素。要移动<g>标签的内容,只能使用transform属性使用“ translate”函数

 <svg width="300" height="300"><g stroke="blue"><line x1="20" y1="20" x2="80" y2="20" /><rect x="20" y="30" height="40" width="60" fill="red" /><text x="20" y="90" stroke="red" fill="red">svg基础</text></g><g stroke="blue" transform="translate(100,100)"><line x1="20" y1="20" x2="80" y2="20" /><rect x="20" y="30" height="40" width="60" fill="red" /><text x="20" y="90" stroke="red" fill="red">svg基础</text></g>
</svg>

在这里插入图片描述

2 渐变

渐变标签必须嵌套在<defs>标签内部

2.1 线型渐变<linearGradient>

线性渐变可以定义为水平,垂直或角渐变:

  • 当y1和y2相等,而x1和x2不同时,可创建水平渐变
  • 当x1和x2相等,而y1和y2不同时,可创建垂直渐变
  • 当x1和x2不同,且y1和y2不同时,可创建角形渐变
<svg><defs><linearGradient id="lineGrad1" x1="0%" y1="0%" x2="100%" y2="0%"><stop offset="0%" stop-color="yellow" stop-opacity="1" /><stop offset="50%" stop-color="green" stop-opacity="1" /><stop offset="100%" stop-color="red" stop-opacity="1" /></linearGradient></defs><rect x="20" y="30" height="40" width="60" fill="url(#lineGrad1)" /><text x="20" y="90" fill="url(#lineGrad1)">svg基础</text>
</svg>

在这里插入图片描述

<svg><defs><linearGradient id="lineGrad1" x1="0%" y1="0%" x2="0%" y2="100%"><stop offset="0%" stop-color="yellow" stop-opacity="1" /><stop offset="50%" stop-color="green" stop-opacity="1" /><stop offset="100%" stop-color="red" stop-opacity="1" /></linearGradient></defs><rect x="20" y="30" height="40" width="60" fill="url(#lineGrad1)" /><text x="20" y="90" stroke="url(#lineGrad1)">svg基础</text>
</svg>

在这里插入图片描述

<svg><defs><linearGradient id="lineGrad1" x1="0%" y1="0%" x2="100%" y2="100%"><stop offset="0%" stop-color="yellow" stop-opacity="1" /><stop offset="50%" stop-color="green" stop-opacity="1" /><stop offset="100%" stop-color="red" stop-opacity="1" /></linearGradient></defs><rect x="20" y="30" height="40" width="60" fill="url(#lineGrad1)" /><text x="20" y="90" stroke="url(#lineGrad1)">svg基础</text>
</svg>

在这里插入图片描述

2.1 放射性渐变<radialGradient>

  • CX,CY和r属性定义的最外层圆和Fx和Fy定义的最内层圆
  • 渐变颜色范围可以由两个或两个以上的颜色组成。每种颜色用一个<stop>标签指定。offset属性用来定义渐变色开始和结束
<svg><defs><radialGradientid="radialGrad2"cx="50%"cy="50%"r="50%"fx="50%"fy="50%"><stop offset="0%" stop-color="white" stop-opacity="0" /><stop offset="100%" stop-color="blue" stop-opacity="1" /></radialGradient></defs><rect x="20" y="30" height="40" width="60" fill="url(#radialGrad2)" /><text x="20" y="90" stroke="url(#radialGrad2)">svg基础</text></svg>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/670528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EasyExcel分页上传数据

EasyExcel分页上传数据 一、实例 controller上传入口 PostMapping("/upload")ResponseBodyLog(title "导入工单", businessType BusinessType.IMPORT)public AjaxResult uploadFile(HttpServletRequest request, MultipartFile files) throws Exceptio…

Node.js+Express+Mysql服务添加环境变量

1、使用dotenv插件 1&#xff09;安装插件&#xff1a;npm install dotenv-cli --save-dev 2&#xff09;在项目根目录下添加对应的 .env 配置文件&#xff1b; // .env配置文件内容 MODEdevelopment, BASE_URLhttp://127.0.0.1:80813) 在启动命令中设置对应的加载文件&#…

springboot159基于springboot框架开发的景区民宿预约系统的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

STM32内部Flash

目录 一、内部Flash简介 二、内部Flash构成 1. 主存储器 2. 系统存储区 3. 选项字节 三、内部Flash写入过程 1. 解锁 2. 页擦除 3. 写入数据 四、工程空间分布 某工程的ROM存储器分布映像&#xff1a; 1. 程序ROM的加载与执行空间 2. ROM空间分布表 一、内部Flash…

2024.3.28-29日ICVS-AI智能汽车产业峰会(杭州)

本次安策将携手泰雷兹一起&#xff0c;参展ICVS2024第四届AI智能汽车产业峰会(杭州)&#xff0c;2024年3月28日-29日&#xff0c;欢迎新老朋友参加和莅临27号展台交流。 随着自动驾驶汽车政策密集落地。从我国四部门联合发布《关于开展智能网联汽车准入和上路通行试点工作的通知…

【0256】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(二)

上一篇:【0255】揭晓pg内核中MyBackendId的分配机制(后端进程Id,BackendId)(一) 文章目录 1. 前言2. 分配BackendId2.1 何时为backend process分配BackendId2.1.1 找出未使用的slot(inactive slot)2.3 BackendId序号从多少开始?2.4 后端进程退出后,其BackendId被释放…

【头歌·计组·自己动手画CPU】一、计算机数据表示(讲解版) 【计算机硬件系统设计】

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的很重要&…

五、Redis之发布订阅及事务管理

5.1 发布订阅 5.1.1 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。Redis 客户端可以订阅任意数量的频道。下图展示了频道 channel1 &#xff0c;以及订阅这个频道的三个客户端 —— client1 、client2 …

力扣题目-1633.各赛事的用户注册率

力扣题目-1633.各赛事的用户注册率 仅作学习&#xff0c;不作他用 题干 用户表&#xff1a; Users Column NameTypeuser_namevarcharuser_idint user_id 是该表的主键(具有唯一值的列)。 该表中的每行包括用户 ID 和用户名。 注册表&#xff1a; Register Column NameTy…

C入门番外篇——C, Are you OK?

今日路上看到一个车牌&#xff0c;52U0K&#xff0c;感觉很有意思&#xff0c;如果做一下简单的翻译就是&#xff0c;“我爱你&#xff0c;好么&#xff1f;” 这样让我脑子中闪现了这样的一个画面&#xff1a;“一个男生追一个女生&#xff0c;看到女生不怎么搭理自己的样子&a…

Spring核心基础:全面总结Spring中提供的那些基础工具类!

内容概要 Spring Framework 提供了众多实用的工具类&#xff0c;这些工具类在简化开发流程、提升代码质量和维护性方面发挥了重要作用&#xff0c;以下是部分关键工具类的总结及其使用场景&#xff1a; StringUtils&#xff1a;不仅提供了基础的字符串操作&#xff0c;如拼接…

转融通业务是什么?好处和弊端是什么?

转融通业务是指证券金融公司借入证券、筹得资金后&#xff0c;再转借给证券公司&#xff0c;为证券公司开展融资融券业务提供资金和证券来源&#xff0c;包括转融券业务和转融资业务两部分。从证券金融公司角度看&#xff0c;向证券公司提供资金和证券供其开展融资融券业务&…

Redis中的缓存穿透、雪崩、击穿的原因以及解决方案(详解)

一、概述 ① 缓存穿透&#xff1a;大量请求根本不存在的key&#xff08;下文详解&#xff09; ② 缓存雪崩&#xff1a;redis中大量key集体过期&#xff08;下文详解&#xff09; ③ 缓存击穿&#xff1a;redis中一个热点key过期&#xff08;大量用户访问该热点key&#xff0c;…

Unity类银河恶魔城学习记录3-2 Entity源代码 P48

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili Entity.cs using System.Collections; using System.Collections.Generic;…

2.6 作业

第五章 静态成员与友元 一、填空题 1、一个类的头文件如下所示&#xff0c;num初始化值为5&#xff0c;程序产生对象T&#xff0c;且修改num为10&#xff0c;并使用show()函数输出num的值10。 #include <iostream.h> class Test { private: static int num; public: Tes…

Android13 系统源码适配安装可卸载的三方apk应用

Android13 系统源码适配安装可卸载的三方apk应用 文章目录 Android13 系统源码适配安装可卸载的三方apk应用一、前言二、Android 系统运行后默认安装三方apk实现1、Android 系统默认安装三方apk实现主要思路2、Android 系统默认安装三方apk具体实现&#xff08;1&#xff09;准…

chartGPT网站

在人工智能日益发展的今天&#xff0c;大语言模型成为了我们生活与工作中不可或缺的一部分。它们能够帮助我们处理文本、回答问题、生成创意内容&#xff0c;甚至协助编程和数据分析。然而&#xff0c;由于网络环境的复杂性&#xff0c;找到一个既稳定又快速的大语言模型网站并…

C++ 中template 模版

C模板&#xff08;Templates&#xff09;主要是编写泛型代码&#xff0c;在编译时为不同数据类型生成相应的函数或类实例&#xff0c;主要有函数模板&#xff0c;类模板 函数模板 #include <iostream> #include <string>using namespace std;template<typenam…

OLAP技术的发展及趋势简述

这里写自定义目录标题 历史发展基于电子表格的数据分析基于传统数据库的数据分析基于大数据的数据分析 当下的现状OLAP技术的分类MOLAPROLAPHOLAP 主流的OLAP引擎新技术的普及内存向量计算列式数据存储及交换增量查询多源融合计算下推物化视图 发展趋势智能化分析多源融合和自动…

C Primer Plus(第六版)15.9 编程练习 第3题

#include <stdio.h> void getbit(int num); int main() { getbit(127); return 0; } void getbit(int num) { int result; int sum0; int mask1; result num; while(result!0) { if((result & mask) 1) sum; result >> 1; } printf("%d打开的位有%d个…