在前面的 SVG 研究之路裡,不斷看到 defs 這個元素的身影,從顏色的填充、線段的圖案、濾鏡的定義...等許多的效果,都必須使用 defs 來定義,因此就直接寫了這篇關於 defs 的文章,也把這個常見但用法又時常不同的元素,一次做一個整理,也方便之後使用的參考。

什麼是 defs

defs 顧名思義就是「definitions」:定義,我們可以把許多重複性質高的元素,放入 defs 元素內,讓它變成一個可以重複利用的物件,原理就有點類似當年 flash 裏頭把一些動畫或是圖案轉換成物件一樣;首先我們來看到最常見的 defs 例子:「重複的圖形」,下面利用 defs 定義了一個矩形的長寬顏色,再使用 use 元素把矩形表現在畫面上,而 use 元素具有 x 與 y 的座標屬性,就可以輕鬆的做出許多不同位置的矩形。

<defs><rect id="rect1" width="100" height="50" x="10" y="10" fill="#c00"/>
</defs>
<use xlink:href="#rect1"/>
<use xlink:href="#rect1" x="110"/>

defs 實例

也可以將 g 元素 ( 群組 ) 放在 defs 元素裏頭:

<defs><g id="g1"><rect id="rect1" width="100" height="50" x="10" y="10" fill="#c00"/><circle id="circle1" cx="30" cy="30" r="10" fill="#00c"/></g>
</defs>
<use xlink:href="#g1"/>
<use xlink:href="#rect1" x="110"/>
<use xlink:href="#circle1" x="210"/>

定義漸層色 ( SVG 研究之路 (7) - fill 填色 ):

<defs><linearGradient id="a1"><stop offset="5%" stop-color="#F00" /><stop offset="95%" stop-color="#ff0" /></linearGradient>
</defs>
<rect x="50" y="250" width="100" height="100" stroke="#000" stroke-width="5" fill="url(#a1)"></rect>
<circle cx="220" cy="300" r="50" stroke="#000" stroke-width="5" fill="url(#a1)"></circle>
<rect x="290" y="250" width="100" height="100" stroke="url(#a1)" stroke-width="5" fill="none"></rect>

定義文字路徑 ( SVG 研究之路 (8) - text 文字 ):

<defs><path id="a1" d="M0 50 C150 150 100 -50 300 50" stroke="#000" fill="none"/>
</defs>
<text><textPath xlink:href="#a1">這是隨著路徑跑的文字,很酷吧</textPath>
</text>

定義剪裁 Cliping ( SVG 研究之路 (9) - Clipping and Masking ):

<defs>  <clipPath id="a1"><rect x="0" y="0" width="200" height="100" />
</clipPath>
</defs>
<circle cx="100" cy="100" r="100" clip-path="url(#a1)" fill="#000" />

定義剪裁 ( SVG 研究之路 (9) - Clipping and Masking ):

<defs><mask id="mask1"> <rect  x="50" y="50" width="100" height="100" fill="#ccc"/><rect  x="150" y="150" width="50" height="50" fill="#fff"/></mask>
</defs><rect id="box1" x="50" y="50" width="150" height="150" fill="#0f0"/><rect id="box2" x="50" y="50" width="150" height="150" fill="#f00" mask="url(#mask1)"/>

定義線段 marker ( SVG 研究之路 (17) - Stroke-marker ):

<defs><marker id="r" viewBox="-10 -10 70 70" refX="25" refY="25" markerWidth="15" markerHeight="15" orient="auto" ><circle fill="#fff" stroke="#000" stroke-width="10" cx="25" cy="25" r="25"/></marker><marker id="g" viewBox="0 0 50 50" refX="25" refY="25" markerWidth="10" markerHeight="10" orient="45" ><rect fill="#0a0" width="50" height="50"/></marker><marker id="b" viewBox="-10 -10 70 70" refX="25" refY="25" markerWidth="15" markerHeight="15" orient="auto" ><circle fill="#f99" stroke="#f00" stroke-width="10" cx="25" cy="25" r="25"/></marker>
</defs>
<polyline points="20,100 50,100 80,20 110,80 140,30 170,100 200,100" fill="none" stroke="black" stroke-width="1" marker-end="url(#b)" marker-start="url(#r)" marker-mid="url(#g)"></polyline>

使用 defs 定義 filter ( SVG 研究之路 (13) - filter - feGaussianBlur ):

<defs>
<filter width="200" height="200" x="0" y="0" id="blur" filterUnits="userSpaceOnUse"><feGaussianBlur stdDeviation="5" />
</filter>
</defs>
<rect x="30" y="30" width="70" height="70" fill="#a00" filter=url("#blur") />

SVG 研究之路 - 再談 defs相关推荐

  1. kafka深入研究之路(1)-剖析各原理02

    kafka深入研究之路(1)-剖析各原理02 接着上一文的内容 继续升入研究 topic如何创建于删除的 topic的创建 具体流程文字为: 1. controller 在 ZooKeeper 的 / ...

  2. 李飞飞:我怎样走上AI研究之路

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 来源:cnbc 编辑:肖琴 转载自:新智元 [导读]近日,李飞飞接受CNBC专访,针对AI未来的发展方 ...

  3. 零基础逐句复现SCI一区论文,从NHANES医学数据分析开启研究之路

    零基础逐句复现SCI一区论文 从NHANES医学数据分析开启研究之路 目录 零基础逐句复现SCI一区论文 从NHANES医学数据分析开启研究之路 1 你离SCI一区并不遥远 2 读论文,逐句复现 2. ...

  4. JavaScript?静下心来的研究之路

    目录 一. 入门级 二.初级开发: 三.中级开发 四.其他阅读 五. 结语 六.感谢 这是我这些年看的书.还有几本没有上镜,因为被朋友借走了,哈哈. (ps:这些书我也并又没全看完,有一些看的昏昏欲睡 ...

  5. Project Anarchy游戏引擎的研究之路

    研究Project Anarchy也有三个星期了,可能很多人都没听说过这个游戏引擎,但是这个引擎非常强大,优化得也非常好,不可小看啊.如果了解过古剑奇谭2的人可能知道,烛龙换了新引擎,买了Havok的 ...

  6. 一枚角度渐变描边 loading 图标的 SVG 修炼之路

    是的,看标题能绕晕你. 那就通俗点,说点人说的话吧.就是下面这货: 渐变描边 这种图标,以一众UI设计师多年深厚的功底,打眼一看就知道,一定是旋转的loading图标.小伙伴称之为什么呢?渐变描边嘛? ...

  7. i 智慧 | 回首30年存储演进之路 再看新数据时代阿里云存储如何革故鼎新?

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 刘丹 责编 | 阿秃 出品 | CSDN云计算(ID:CSDNcloud) 人类以日新月异的速度刷新着科技的成果,其中存储的发展历史 ...

  8. 北京正研究“车路协同”模式,将打造自动驾驶测试专用道路

    据透露,第一条自动驾驶测试专用道路将落地亦庄. 今天上午,北京市交通委相关负责人在一档节目中透露,为了推广自动驾驶技术,北京将在未来对道路设置进行改造,实现"车路协同",而第一条自 ...

  9. 路再长也有尽头,别往回走

    这个时代的青年,能够把自己安排对了的很少.越聪明的人,越容易有 欲望 ,越不知应在哪个地方搁下那个心.心实在应该搁在当下的.可是聪明的人,老是搁不在当下,老往远处跑,烦躁而不宁.所以没有志气的固不用说 ...

  10. 深入研究vue还是再学react,vue 和 react 哪个前景好

    各位前辈,如今学vue还是react呢,感觉vue是国产的,迟早超越react,但是适合做APP吗? 1.首先国内很多公司近年来对vue的使用呈上升态势的.也有使用vue通过不同的打包方式打包成app ...

最新文章

  1. hexo的next主题个性化教程 打造炫酷网站
  2. php中 ob_start()有什么作用
  3. setlenient_Java日历setLenient()方法与示例
  4. mybatis ------ 懒加载(八)
  5. 使用Jsoup完成网页爬虫
  6. java diamond 有什么用_Diamond语法何时在Java 8中不起作用?
  7. 跟着杨中科学习asp.net之javascript
  8. python 调用bat失败_死机、卡顿、蓝屏,Python部门的老江湖告诉我的一些超级变态代码...
  9. mysql 导出数据 insert_mysql导出数据和导入数据
  10. 轻松制作 Notion 风格的头像 - Notion Avatar Maker
  11. 程序员有哪些职业发展方向呢?Linux运维
  12. MISC:基本思路 · 常用命令
  13. Desktops 虚拟桌面软件(推荐)
  14. 淘宝内乱持续 QQ盛大京东“趁火打劫”
  15. 【119天】尚学堂高琪Java300集视频精华笔记(24-30)
  16. Kafka 测试环境宕机原因查询(二)
  17. mapbox中文地图_使用 Mapbox 地图
  18. linux crash分析案例之进程同步
  19. Linux常用命令及解析
  20. 蜻蜓FM获新一轮融资:多名创始高管已经淡出,前不久被通报下架

热门文章

  1. Python“信息轰炸”
  2. Oracle (08)JDBC
  3. 【Appium踩坑】WebDriverAgent 在iOS 14系统执行 test 时,一直报错:test crashed
  4. android 字体删除线,android TextView 设置和取消删除线的两种方法
  5. 大连开发区中老年运动微信群_大连跑步微信群
  6. jQuery设计思想
  7. 一个程序员的买房历程(武汉)
  8. 常见鸟的种类及特点_湿地鸟类种类及分布特点
  9. Android 给图片加边框
  10. 有道云笔记分享_原来分享可以更美的 有道云笔记分享功能优雅变身