高清ICON SVG解决方案(下)

在上一篇文章中,我们讲述了字体渲染机制和导致iconfont出现锯齿的原因,以及如何才能出绘制高质量SVGICON,并且提供了一套AI模版供大家参考使用。下文将讲诉前端侧我们如何用SVG来做成高清IOCN,并且良好支持PC下的各个浏览器,并兼容IE6+以上的浏览器。

上期回顾:《高清ICON  SVG解决方案(上)》

从上一篇文章中我们得知SVG做的图标在IE9+的浏览器渲染效果相当的差,所以在IE下我们我们不使用SVGICON,我们可以将SVG转成一倍的png图片来进行替代。首先来简单的普及一下SVGICON的几个使用方法:

第一种Inline SVG

这种方法就是直接把SVG标签写入到HTML中去,直接通过修改fill和stroke属性来控制填充颜色和边框颜色,但是缺点就是维护性不好,如果一个页面Icon特别多,可能要写好几十个SVG在页面,复用性差,后期扩展性也不佳。

第二种img/object 标签

这种方法直接将SVG ICON保存成一个一个单独文件,通过img或object标签引用,他的缺点就是请求数增加,每个图标都去独自加载,对服务器负载和页面高速加载不好。

第三种background and Data URIs

在上一篇文章中我有一种调用方法就是采用background去调用SVG文件:

还有如果单独使用background引用SVG也会和第一种方案一样造成请求数增加,所以有不少人通过使用base64 编码来减少HTTP请求:

不过不太建议使用base64 编码,无论性能和维护方面都不是特别好,记得看过一个测试base64性能的文章,base64在移动端渲染时间比正常使用url的渲染时间要慢6倍。

第四种SVG Sprites

目前市面上有很多提供ICON FONT制作的网站,例如:icomoon不止开源,而且功能实在强大,可以提供输出SVG Sprites的功能,SVG Sprites它的使用方法其实就跟Png sprites是一样的,把多个SVG ICON合并到一个SVG文件里面去,然后通过background-position进行定位,这种方法可以解决请求数增多的问题。

当然如果你不喜欢用icomoon也可以用自动化工具生成SVG Sprite例如用:gulp-svgstore、grunt-iconizr、gulp-svg-sprites

第五种SVG Defs/Symbols

这种其实就是在SVG Sprites上面更进一步的使用了,SVG Sprites是需要我们去通过坐标获取对应位置图标的,但是SVG Defs/Symbols就更简单了,直接通过给每个SVG ICON定义ID,直接调用对应ID即可:

将上面代码保存为SVG文件后,在HTML我们通过下面的方式可以直接调用:

新的方案:Svg Sprites +Png Sprites + Image-set

由于我们知道SVG在IE下的兼容性并不好,所以在高清ICON的适配在第四种方案的基础上进行优化,首先用icomoon进行下面的步骤操作:

第一步将用AI模板做好的图标转换成SVG文件后导入到icomoon中:

第二步:

第三步,设置导出文件前的类名,图标间距,颜色等等一系列参数,然后下载压缩包:

第四步,只获取我们所需要的文件夹的内容:

第五步,对icomoon生成的样式sprite.css进行微调整让其适配所有PC浏览器和Retina下的浏览器:

最后的效果:

CSS4 Image-set

这里应该有人会觉得也可以使用Media Queries来进行判断处理在Retinal来加载SVG Sprites,但其实Image-set它和Media Queries有些许,它不需要告诉浏览器使用什么图像,而是直接提供了图像让浏览器自己去选择加载合适的图片。兼容性方面在Safari6.1开始和Chrome21就开始支持这个属性了。

总结

SVG目前还是存在许多问题,Windows下使用IE的兼容性和渲染效果都太差,在PC侧我们无法全量使用,所以我们可以用上面的这套解决方案解决PC下所有浏览器下兼容问题,在Retina下,不管是device =2还是3都可以兼容,不管未来是否会有更高的devicePixelRatio出来,按照上面的方法都能完美兼容,并且在对应不同的devicePixelRatio下浏览器会自动选择加载SVG或者PNG,不会两张都同时加载。

上一篇文章之所以在火狐图标出问题那块讲了许久,并抛出更严谨的图标制作方法的主要原因这个方案需要对合并后的SVG Sprites转成PNG Sprite图片,如果SVG ICON做的有问题,那生成的图片也然出现发虚的情况,大家看我最后那个效果图下,PC下所有浏览下,中间那个锁的图标虽然是用的生成的图片但是依旧是发虚的和火狐下当时出问题的效果是一样。

腾讯ISUX

(0)

相关推荐

  • 高清ICON SVG解决方案(上)

    随着硬件快速的发展,Retina技术发展至今 目前Google Nexus6的devicePixelRatio已经到了3.5,虽然目前主流的Retina显示器还是以devicePixelRatio = ...

  • 配置Intel Baytrail-M平台联想笔记本播放高清影片时无法开启硬件加速问题

    故障现象: 近期有反映在使用Intel Baytrail-M平台的机型:Yoga2 11、Flex 2 14、Flex 2 15、G40-30、G50-30、S20-30、S20-30 Touch、N ...

  • win7下会声会影如何输入高清MP4格式文件

    有些win7旗舰版系统用户在会声会影制作好视频后,我们要将其导出来.为了能够在手机,电脑上都能看,上传到网站时还是高清的,我们要将其转换成一种MP4格式文件,那么win7系统下会声会影怎么输入高清MP ...

  • 怎么设置快看漫画中移动网络下加载高清图片

    有的小伙伴喜欢使用快看漫画软件看漫画,当没有网络时,系统会默认加载低质的图片,大大影响了看漫画的体验,那么如何设置移动网络下加载高清图片呢?小编就来为大家介绍一下吧.具体如下:1. 第一步,点击并打开 ...

  • 手把手教你下载网易云音乐的高清正版视频MV

    有许多小伙伴喜欢使用网易云音乐看音乐视频或者和网友讨论喜欢的音乐,有的人可能遇到喜欢的音乐了,还会点击下载,视频也是一样,可是视频该怎么下载呢?今天小编就来教一教大家,希望对大家有帮助. 操作方法 0 ...

  • Visio矢量图怎么转换为高清的tiff文件?

    很多科研人员在绘制技术路线或者是写论文是喜欢利用Microsoft Visio软件,该软件生成的vsd文件具有体积小,无限放大不模糊的特点,深受科研人员推崇.但是在一些特殊情况下需要将vsd文件输出为 ...

  • LED高清全彩屏

    操作方法 01 LED高清全彩屏驱动解决方案介绍和比较d h 15 8 17 39 68 91 TLC5941驱动芯片 TLC5941芯片是TI德州仪器)公司最新推出的,具有点校正.高灰度等级(PWM ...

  • HDCVI摄像机跟高清IPC有什么不同

    操作方法 01 IPC是什么,HDCVI又是什么?两者的关系如何,区别在哪?谁的利润最大,谁又将是今后市场主流? 一.概念 IPC:网络摄像机(IP CAMERA),是一种结合传统摄像机与网络技术所产 ...

  • 软解也能看高清——Win7Codecs软解实战记录

    本帖最后由 小雪君 于 2010-11-26 19:25 编辑 高清,首先想到的是显卡和CPU共同工作的硬解码.其实不然,硬解码往往会带来视频文件播放的不稳定带来跳帧的问题.而一些配置强大 CPU的电 ...