【 SVG 】二、SVG 容器元素

news2024/9/22 7:21:51

一、本文概述

本文所介绍的 svg 中元素,通常不会直接作为直接展示元素,而是配合其他基础元素,以实现指定功能的图层组,本文围绕 svg 常用容器元素,进行实战应用;

二、 SVG 容器元素(常用)

  • <svg> 作为一个 svg 图层的根元素(必须存在元素)
  • <defs> 可引用公共图形
  • <mask> 遮罩层
  • <pattern> 常定义在 defs 中,常用于填充、描边元素(背景图)
  • <symbol> 定义一个图形模板对象,它可以用一个 use 元素实例化
  • <g> group 分组元素,结构化图形组
  • <a> 超链接标签

三、实战

  • svg

    <svg width="140" height="30"></svg>
    
  • defs
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>defs demo</title>
      <style>
        .border {
          border: 1px solid red;
        }
      </style>
    </head>
    
    <body>
      <svg class="border" width="120" height="120" viewBox="0 0 120 120">
    
        <defs>
          <linearGradient id="Gradient-red-green">
            <stop offset="20%" stop-color="#F00" />
            <stop offset="90%" stop-color="#0F0" />
          </linearGradient>
        </defs>
    
        <rect x="10" y="10" width="100" height="100" fill="url(#Gradient-red-green)" />
      </svg>
    </body>
    
    </html>
    
  • mask
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>mask demo</title>
      <style>
        .border { border: 1px solid red; }
      </style>
    </head>
    
    <body>
      <svg class="border" width="120" height="120" viewBox="0 0 120 120">
    
        <defs>
          <linearGradient id="gradient-demo" x1="0%" y1="0%" x2="100%" y2="0%" spreadMethod="reflect">
            <stop offset="10%" stop-color="#F00" stop-opacity="1" />
            <stop offset="100%" stop-color="#0F0" stop-opacity="1" />
          </linearGradient>
    
          <mask id="mask-demo" x="0" y="0" width="100" height="100">
            <rect x="0" y="0" width="100" height="100" style="fill:url(#gradient-demo)" />
          </mask>
        </defs>
    
        <text x="20" y="55" style="fill:black;">mask 蒙版</text>
    
        <rect x="10" y="10" width="100" height="100" style="stroke:none; fill:green; mask:url(#mask-demo)" />
      </svg>
    </body>
    
    </html>
    
  • pattern
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>pattern demo</title>
      <style>
        .border { border: 1px solid red; }
      </style>
    </head>
    
    <body>
      <svg class="border" width="120" height="120" viewBox="0 0 120 120">
    
        <defs>
          <linearGradient id="gradient-demo" x1="0%" y1="0%" x2="100%" y2="0%" spreadMethod="reflect">
            <stop offset="10%" stop-color="#F00" stop-opacity="1" />
            <stop offset="100%" stop-color="#0F0" stop-opacity="1" />
          </linearGradient>
    
          <pattern id="fill-demo" x="0" y="0" width="0.2" height="0.2">
            <circle cx="10" cy="10" r="5" fill="red" />
            <polygon points="0 5 20 5 10 20" fill="none" stroke="blue" />
          </pattern>
    
          <pattern id="border-demo" x="0" y="0" width="0.2" height="0.2">
            <rect width="20" height="20" fill="url(#gradient-demo)"></rect>
          </pattern>
        </defs>
        
        <rect x="10" y="10" width="100" height="100" fill="url(#fill-demo)" stroke="url(#gradient-demo)" stroke-width="5" />
        
      </svg>
    </body>
    
    </html>
    
  • symbol
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>symbol demo</title>
      <style>
        .border { border: 1px solid red; }
      </style>
    </head>
    
    <body>
      <svg class="border" width="120" height="120" viewBox="0 0 120 120">
    
        <defs>
          <symbol id="symbol-demo" viewBox="0 0 150 110">
            <circle cx="40" cy="30" r="20" stroke-width="8" stroke="green" fill="none" />
          </symbol>
        </defs>
    
        <g id="layer-root">
          <use xlink:href="#symbol-demo" x="0" y="20" width="100" height="50" />
          <use xlink:href="#symbol-demo" x="0" y="50" width="75" height="38" />
          <use xlink:href="#symbol-demo" x="0" y="80" width="50" height="25" />
        </g>
    
      </svg>
    </body>
    
    </html>
    
  • g
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>g demo</title>
      <style>
        .border { border: 1px solid red; }
      </style>
    </head>
    
    <body>
      <svg class="border" width="120" height="120" viewBox="0 0 120 120">
        
        <!-- g 图层下所有元素继承:fill="white" stroke="green" stroke-width="10" 属性 -->
        <g fill="white" stroke="green" stroke-width="10"> 
          <circle cx="40" cy="40" r="10" /> 
          <circle cx="60" cy="40" r="10" /> 
          <circle cx="80" cy="40" r="10" /> 
          <circle cx="50" cy="55" r="10" /> 
          <circle cx="70" cy="55" r="10" /> 
        </g>
    
      </svg>
    </body>
    
    </html>
    
  • a
    在这里插入图片描述

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>a demo</title>
      <style>
        .border { border: 1px solid red; }
      </style>
    </head>
    
    <body>
      <svg class="border" width="120" height="120" viewBox="0 0 120 120">
        <a xlink:href="https://www.baidu.com" target="_blank">
          <text x="10" y="50" style="font-size:12px;" fill="blue"> 跳转到 Baidu </text>
        </a>
      </svg>
    </body>
    
    </html>	
    



—————— END —————




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

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

相关文章

「软件测试」最全面试问题和回答,全文背熟不拿下offer算我输

一般要应聘关于测试的工作&#xff0c;面试题会不会很难?下面小编整理了软件测试面试题及答案&#xff0c;欢迎参考! 一、引言 1.1 文档目的 本次文档是为了收集在面试中遇到的一问题与常见的一些答案并不是唯一答案 二、职业规划 2.1 简单的自我介绍下 面试宫&#xff…

层层剥开Transformer;Windows Copilot初版非常简陋

&#x1f989; AI新闻 &#x1f680; 微软Win11引入Windows Copilot功能&#xff0c;但初版非常简陋 摘要&#xff1a;微软在Win11 Build 23493预览版更新中引入了Windows Copilot功能&#xff0c;该功能在任务栏上新增了一个图标按钮。点击按钮后&#xff0c;屏幕右侧会跳出…

10_Activiti7

工作流(workflow)系统 具有工作流的系统,使用的专门的建模语言(BPMN)定义 通过计算机对业务流程自动化执行管理 使用传统方式实现 ​ 代码工作量大,若流程发生改变的话,编写 的代码也会发生响应的改变 工作流引擎 按照BPMN规范进行部署,将业务和节点的流程进行分离 没有…

oracle rowscn 简单记录

可以通过ROWSCN 侦测row是否有变化&#xff0c;但需要注意&#xff1a; 默认是一个block的scn 相同可以通过create table ROWDEPENDENCIES 在每行上记录无论哪种模式&#xff0c;ROW SCN是一个大致值&#xff0c;不是准确值 NOROWDEPENDENCIES | ROWDEPENDENCIES This claus…

软件测试丨常用测试策略与测试手段

测试策略是指在特定环境约束之下&#xff0c;描述软件开发周期中关于测试原则、方法、方式的纲要&#xff0c;并阐述了它们之间如何配合&#xff0c;以高效地减少缺陷、提升质量。 测试策略中需要描述测试类型与测试目标以及测试方法&#xff0c;准入准出的条件&#xff0c;以…

初学spring5(六)静态/动态代理模式

学习回顾&#xff1a;初学spring5&#xff08;五&#xff09;使用注解开发 一、代理模式 为什么要学习代理模式&#xff0c;因为AOP的底层机制就是动态代理&#xff01; 代理模式&#xff1a; 静态代理动态代理 学习aop之前 , 我们要先了解一下代理模式&#xff01; 二、静态代…

【前端】element button鼠标点击按钮更改样式

目录 一、实现效果二、代码如下&#x1f680;写在最后 一、实现效果 二、代码如下 <span><el-button type"text"><img src"../../../../../src/assets/slice/question.png" style"font-size: 14px;margin-bottom: 0.26rem">&l…

安全响应中心 — 垃圾邮件事件报告(6.28)

2023年6月 第四周 样本概况 ✅ 类型1&#xff1a;伪造正常转发邮件&#xff08;链接&#xff09; 钓鱼邮件一直是邮件防护绕不开的话题。近日安全团队收到了一批钓鱼邮件&#xff0c;发送者将正常邮件内容和钓鱼内容拼凑在一起&#xff0c;将一封钓鱼邮件伪装成经过转发的正…

TypeScript 总结

文章目录 TypeScript 总结概述运行ts文件方式一方式二 基础声明变量类型数组元组联合类型取值限制 枚举类型any & unknownvoid & undefined类型适配 面向对象函数普通函数箭头函数可选参数默认参数 对象创建对象对象的类型限制 类和接口泛型简单使用多个泛型默认泛型类…

react基础-React原理揭秘React路由基础

React原理揭秘 目标 能够说出React组件的更新机制能够对组件进行性能优化能够说出虚拟DOM和DIff算法 组件更新机制 setState() 的两个作用 修改state更新组件 过程&#xff1a;父组件重新渲染时&#xff0c;也会重新渲染子组件&#xff0c;但只会渲染当前组件子树&#xff…

BUUCTF Cipher 1

BUUCTF:https://buuoj.cn/challenges 题目描述&#xff1a; 还能提示什么呢&#xff1f;公平的玩吧&#xff08;密钥自己找&#xff09; Dncnoqqfliqrpgeklwmppu 注意&#xff1a;得到的 flag 请包上 flag{} 提交, flag{小写字母} 密文&#xff1a; Dncnoqqfliqrpgeklwmppu解…

vector 数据流查询命令

原文来自&#xff1a;vector 数据流查询命令 | 老五笔记 A lightweight, ultra-fast tool for building observability pipelines&#xff0c;vector在日常运维数据采集中也具有非常重要的作用。很多命令和详细说明可以从官方文档中达到最权威的介绍&#xff1a; Vector | A l…

Nginx【Nginx场景实践(代理服务、 反向代理、负载均衡、负载均衡算法)】(八)-全面详解(学习总结---从入门到深化)

目录 Nginx场景实践_代理服务 Nginx场景实践_反向代理 Nginx场景实践_负载均衡 Nginx场景实践_负载均衡算法 Nginx场景实践_代理服务 正向代理 正向代理&#xff0c;是在用户端的。比如需要访问某些国外网站&#xff0c;我们可能需要购买vpn。 正向代理最大的特点&#…

[软件基础] ELF executable and linking formate

Chapter 7 Object File Format (Linker and Libraries Guide) https://docs.oracle.com/cd/E19683-01/817-3677/chapter6-46512/index.html

何时开始学习Qt和C++,以及如何有效学习?

学习Qt并使用C编程可以为您开发跨平台的图形用户界面&#xff08;GUI&#xff09;应用程序提供良好的基础。下面是一些学习Qt的步骤和建议&#xff0c;以及建议的C知识水平&#xff0c;适合您开始学习Qt&#xff1a; 学习C基础知识&#xff1a;Qt是使用C编写的&#xff0c;因此…

【计算机网络】集线器和交换机的区别

1. 早期–总线型以太网 2. 集线器–星型以太网 3.以太网交换机 4. 集线器和以太网交换机的对比 4.1 单播、多播、同时单播 4.2 扩展以太网的单播 4.3 扩展以太网的多播 4.4 小结

麒麟系统(Liunx)离线安装docker和docker compose

文章目录 一、前言二、准备工作1、查看操作系统版本2、查看操作系统架构 三、安装docker和docker compose1、下载docker离线包2、下载docker compose离线包3、准备 docker.service 系统配置文件4、准备docker的安装脚本文件5、准备docker的卸载脚本文件6、安装 docker 和 docke…

【Axure高保真原型】通过输入框动态控制饼图

今天和大家分享通过输入框动态控制饼图的原型模板&#xff0c;在输入框里维护项目数据&#xff0c;可以自动生成对应的饼图&#xff0c;鼠标移入对应扇形&#xff0c;可以查看对应数据。使用也非常方便&#xff0c;只需要修改输入框里的数据&#xff0c;或者复制粘贴文本&#…

低代码应用开发 高效构建业务系统

低代码是传统软件开发逐步优化和演变的产物&#xff0c;并非全新革命。传统的开发方法过于昂贵和僵化&#xff0c;无法为企业提供所需的高效和敏捷的开发流程&#xff0c;且交付周期长定制能力弱&#xff0c;难以应对不断变化的市场和客户期望&#xff0c;为提高软件开发效率&a…

Python - bool转int,用类型转换还是if-else?

说下结论&#xff0c;虽然直接用int强转的写法比较简洁&#xff0c;但是用if-else的效率更高&#xff08;规避了函数调用的开销&#xff09;。 举个栗子&#xff1a; lst [True, False]def a(a100000):starttime.time()for i in xrange(a):lst[0 if random.choice(lst) else …