前言

由于SVG自身的矢量性质,不管在什么情况下,图标都很清晰,可以适应不同尺寸大小和不用分辨率。不用担心模糊和锯齿。同时还能更改图标的填充颜色。

CSS sprite 和SVG Sprite

传统的CSS sprite可以分为图片和字体图片。

图片是将所有的icon整合到一张图中,然后通过定位获取其中的某个图标。有点是管理简单,网络请求少。缺点是无法更改图标的样式,在高分辨率的屏幕下看和周围的样式比较起来有点模糊。而且大于图标原图大小的渲染也会导致图片模糊。所用同样的图标有时需要制作很多个。

相对来说字体图标会好很多。字体图标的基本原理是将Icon定义为图片字体, 在CSS中用@font-face引入Icon Font自定义字体, 再利用font-family和字符码显示出指定的图标。

字体图标的意思就是这个图标类似字体,我们可以设置他的gont-size和color等。但字体图标有字体图标的缺点,就是只有一个颜色,无法设置复杂颜色的图标。

SVG图标具备图片图标和字体图标的有点,可以更改样式同时保证清晰。

SVG sprite

symbol标签

symbol元素在SVG雪碧图的使用中,属于用于定义图片内容。

  • symbol元素用来定义一个图形模板对象,它可以用一个元素实例化。symbol元素对图形的作用是在同一文档中多次使用,添加结构和语义。结构丰富的文档可以更生动地呈现出来,类似讲演稿或盲文,从而提升了可访问性。注意,一个symbol元素本身是不呈现的。只有symbol元素的实例(亦即,一个引用了symbol的 元素)才能呈现。
  • symbol里面可以添加任意的svg元素,包括动画,除了不显示外基本和svg标签差不多,同样可以设置viewbox这些属性。
  • 我们在定义图标时,每一个symbol代表一个图标。
<svg><symbol id="svg-test" viewBox="0 0 26 26"><desc>居中对齐</desc><path d="M7,9h12c0.5,0,1-0.5,1-1s-0.5-1-1-1H7C6.5,7,6,7.5,6,8S6.5,9,7,9z"/><path d="M19,17H7c-0.5,0-1,0.5-1,1s0.5,1,1,1h12c0.5,0,1-0.5,1-1S19.5,17,19,17z"/><path d="M10,12c-0.5,0-1,0.5-1,1s0.5,1,1,1h6c0.5,0,1-0.5,1-1s-0.5-1-1-1H10z"/></symbol><symbol id="svg-tool-stroke-5" viewBox="0 0 30 16" ><desc>描边5</desc><rect x="-10" y="6" width="7" height="2"/><rect x="-1" y="6" width="2" height="2"/><rect x="3" y="6" width="7" height="2"/><rect x="12" y="6" width="2" height="2"/><rect x="16" y="6" width="7" height="2"/><rect x="25" y="6" width="2" height="2"/><rect x="29" y="6" width="7" height="2"/><rect x="38" y="6" width="2" height="2"/></symbol>
</svg>

这个symbol也有点想一个SVG,本身里面的内容就是一个完成的图形,同时也是有viewbox属性,这个属性跟svg的viewbox一样。

需要留意的是,symbol里面无法定义defs的,所以如果设计纹理或者渐变之类的图标样式,需要在symbol所在的svg之前,再用一个svg来定义这些填充内容。然后再在symbol里面引用。

use标签

use标签,用于引用在defs标签定义好了的元素。起到重复使用标签的作用。这里可以使用use来使用定义在symbol中的图标。

use标签有两个作用:
1、可重复调用
2、跨SVG调用

<svg><defs><g id="shape"><rect x="0" y="0" width="50" height="50" /><circle cx="0" cy="0" r="50" /></g></defs><use xlink:href="#shape" x="50" y="50" /><use xlink:href="#shape" x="200" y="50" />
</svg><svg width="500" height="110"><use xlink:href="#shape" x="50" y="50" /></svg>

use是SVG图标的一个关键点,我们可以把SVG图标全部定义在一个SVG中,统一处理。在需要使用的地方再重新创建一个SVG,通过use标签来调用图标。

这样做的好处是可以降低图标代码的重复使用减少对业务代码的影响。

更改SVG图标的样式

我们可以更改SVG图标的大小和填充色,大小就不用说了

要更改填充色,首先在symbol下定义的图标自身标签上不能带有颜色,然后在使用时我们直接改使用时的svg的fill,这个fill的颜色值会继承到use里面去,也就可以更改图标的颜色。如果我们在symbol里面已经定义好了样色的是无法在使用时更改的。如下:

<svg><symbol id="svg-test" viewBox="0 0 26 26"><desc>居中对齐</desc><path d="M7,9h12c0.5,0,1-0.5,1-1s-0.5-1-1-1H7C6.5,7,6,7.5,6,8S6.5,9,7,9z"/><path d="M19,17H7c-0.5,0-1,0.5-1,1s0.5,1,1,1h12c0.5,0,1-0.5,1-1S19.5,17,19,17z"/><path d="M10,12c-0.5,0-1,0.5-1,1s0.5,1,1,1h6c0.5,0,1-0.5,1-1s-0.5-1-1-1H10z"/></symbol>
</svg><svg fill="red"><use xlink:href="#svg-test"/>
</svg>
<svg fill="blue"><use xlink:href="#svg-test"/>
</svg>
如何更改图标中的多个颜色

根据上面描述知道,如果安装上面的方式,那能够更改的只有图标中的一种颜色。当然也是可以设置多个颜色。这里使用到css的自定义属性

需要对symbol里面的图标进行更改,将图形的颜色设置为fill: var(–*[, default])的形式。

<symbol id="icon-flag" width="150" height="100" viewBox="0 0 3 2"><rect width="1" height="2" x="0" style="fill: var(--color0, #008d46)" /><rect width="1" height="2" x="1" style="fill: var(--color1, #fff)"/><rect width="1" height="2" x="2" style="fill: var(--color2, #d2232c)"/>
</symbol>

定义css样式

.flag-belgium {--color0: #201b18;--color1: #f1ee3d;--color2: #dc352f;
}
<svg class="icon"><use xlink:href="#icon-flag"/>
</svg>
<svg class="icon flag-belgium"><use xlink:href="#icon-flag"/>
</svg>

SVG进阶-sprite 雪碧图相关推荐

  1. 【HTML+CSS】(2)CSS Sprite雪碧图

    1. 雪碧图的使用场景 (1). 静态图片.不随用户信息的变化而变化 (2). 小图片.图片容量比較小 (3). 载入量比較大 一些大图不建议拼成雪碧图,比如淘宝站点的导航图片都是使用的雪碧图. 2. ...

  2. 在html中雪碧图的坐标怎么看,详解CSS Sprite雪碧图的应用

    CSS雪碧图,即CSS Sprite,也有人叫它CSS精灵图,是一种图像拼合技术.该方法是将多个小图标和背景图像合并到一张图片上,然后利用CSS的背景定位来显示需要显示的图片部分. 雪碧图的使用场景 ...

  3. CSS Sprite——雪碧图

    CSS Sprites技术被国内一些人称为CSS雪碧图,其实就是把网页中一些背景图片整合到一张图片文件中,再利用CSS的"background-image","backg ...

  4. CSS Sprite雪碧图详解

    CSS雪碧图,即CSS Sprite,也有人叫它CSS精灵图,是一种图像拼合技术.该方法是将多个小图标和背景图像合并到一张图片上,然后利用CSS的背景定位来显示需要显示的图片部分. 雪碧图的使用场景 ...

  5. 雪碧图PHP,Css Sprite(雪碧图、精灵图) - SegmentFault 思否

    一.精灵图使用场景: 二.Css Sprite(优点) 减少图片的字节. 减少网页的http请求,从而大大的提高页面的性能. 解决了网页设计师在图片命名上的困扰,只需对一张集合的图片上命名就可以了,不 ...

  6. html5复合选择器,web前端练习31----Css,选择器(基本选择器,复合选择器,属性选择器,伪类,伪元素,优先级,雪碧图练习)...

    参考文档:https://man.ilovefishc.com/css3/ 一.基本选择器: 1通配符选择器 * 2元素选择器 element 3类选择器 .class 4id选择器 #id 5内联样 ...

  7. webpack雪碧图生成

    原文链接:http://dopro.io/webpack-sprites.html 前言 在HTTP/2.0还没有普及的现在,css sprite(雪碧图)仍是前端工程化中必备的一环,而随着webpa ...

  8. html css雪碧图,css常见小技巧(雪碧图)

    1.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用 CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用 ...

  9. CSS 网站小图标 雪碧图

    https://www.jianshu.com/p/7482dde882af 网站开发90%会用到小图标, 多小图标调用显示是前端开发常见的问题:目前小图标显示常见有两种方式(其他方式欢迎补充):1. ...

最新文章

  1. 取消打开命令行进入默认anaconda的环境
  2. (Buuctf) [第五空间2019 决赛]PWN5 简单格式化字符串漏洞利用
  3. 求矩形中心点坐标编程c语言,c语言编程序求矩形面积 我是新手,很多不懂,初学...
  4. jquery 下拉框 select2 运用 笔记
  5. 前端学习(3270):js中this的使用call bind
  6. uc通讯不成功php版本过高,Ucenter通信失败排查方法
  7. HLSL编译工具—FXC
  8. JavaScript parseInt() 函数
  9. 中南大学网络教育计算机考试答案,2015年6月中南大学网络教育课程考试《计算机组成原理》复习题及参考答案.pdf...
  10. Java、JSP大学生助学贷款管理系统的设计与实现
  11. 小程序定位并获取城市编码
  12. 案例:模拟京东快递单号查询 字体放大显示
  13. 收藏 | 百度、美团 ClickHouse、Flink 干货总结!
  14. 【杂烩】Tesla M40 训练机组装与散热改造
  15. python学习笔记:插入函数append,extend与insert的使用与区别
  16. [BUUCTF-pwn] wdb_2018_semifinal_pwn3
  17. 千里马-modulo
  18. VScode怎么开启本地服务器及本地调试?
  19. 在arduino中ESP8266的GPIO引脚及控制序号
  20. 语法格式描述规范BNF、EBNF、ABNF

热门文章

  1. Docer容器的介绍(一)-------Docker基本概念和框架
  2. QlikView介绍
  3. 站内信设计文档及源代码下载
  4. 敬你一杯酒,从此莫回头。往事归零,爱恨随意。我干杯,你随意
  5. murmur3哈希算法
  6. Encoder-decoder模型及Attention机制
  7. python查找元素在列表中位置
  8. 中东多国与卡塔尔断交或为黑客入侵所致? FBI协助调查
  9. 中医大2020年7月网考计算机应用基础,2020年7月网络教育统考《计算机应用基础》操作系统应用模拟题试卷2...
  10. Exp9 Web安全基础 20164302 王一帆