高清ICON SVG解决方案

在上一篇文章中,我们讲述了字体渲染机制和导致iconfont出现锯齿的原因,以及如何才能出绘制高质量SVG ICON,并且提供了一套AI模版供大家参考使用。

下文将讲诉前端侧我们如何用SVG来做成高清IOCN,并且良好支持PC下的各个浏览器,并兼容IE6+以上的浏览器。

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

第一种Inline SVG

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


1

2

3

<svg  width="74" height="74" viewBox="0 0 74 74">

    <path fill="#444444" d="M25.42 27.737v-11.555c0-6.382 5.174-11.555 11.555-11.555s11.555 5.174 11.555 11.555v11.555h4.622v-11.555c0-8.935-7.243-16.178-16.178-16.178s-16.178 7.243-16.178 16.178v11.555h4.622z"></path>

</svg>

第二种img/object 标签

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


1

<img src="svg/16-16.svg" alt="test icon" />

第三种background and Data URIs

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


1

2

3

.icon {

backgound-image: url(test.svg)

}

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


1

2

3

.icon

  backgroundurl(data:text/svg+xml;base64,)

}

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

第四种SVG Sprites

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


1

2

3

4

5

6

7

8

.icon {

    width16px;

    height16px;

    display: inline-block;

    background-repeatno-repeat;

    background-imageurl(sprite.svg);

     background-position0 0;

}

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

第五种SVG Defs/Symbols

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


1

2

3

4

5

6

7

8

<svg xmlns="http://www.w3.org/2000/svg">

    <symbol id="icon1" viewBox="0 0 32 32">

        <path fill="#444444" d="M3 3h1v12h-1v-12z"></path>

    </symbol>

    <symbol id="icon2" viewBox="0 0 32 32">

        <path fill="#444444" d="M3 14h10v1h-10v-1z"></path>

    </symbol>

</svg>

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


1

2

3

4

5

6

<svg class="icon1">

    <use xlink:href="/svg/symbol.svg#icon1"></use>

</svg>

<svg class="icon2">

    <use xlink:href="/svg/symbol.svg#icon2"></use>

</svg>

新的方案: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下所有浏览下,中间那个锁的图标虽然是用的生成的图片但是依旧是发虚的和火狐下当时出问题的效果是一样。

时间: 2025-01-14 01:52:24

高清ICON SVG解决方案的相关文章

将模糊的CAD图纸转换成高清彩色SVG格式如何进行?

将模糊的CAD图纸转换成高清彩色SVG格式如何进行?CAD图纸文件是需要使用到专门的看图软件才能够将其进行打开查看的,一般为了方便将其进行传输等操作都会需要进行的操作就是将其进行的是格式间的转换操作,具体应该怎么样进行,将CAD图纸转换成SVG格式,接下来小编就要来教大家的就是将模糊的CAD图纸转换成高清彩色SVG格式如何进行的全部操作步骤,希望能够帮助到你们,望采纳! 步骤一:首先需要进行启动的是你们电脑上面的迅捷CAD转换器软件,电脑上面没有这款软件的可以去到迅捷CAD官网上面进行下载安装!

Android_性能优化之ViewPager加载成百上千高清大图oom解决方案

一.背景 最近做项目需要用到选择图片上传,类似于微信.微博那样的图片选择器,ContentResolver读取本地图片资源并用RecyclerView+Glide加载图片显示就搞定列表的显示,这个没什么大问题,重点是,点击图片进入大图浏览,比如你相册有几百张图片,也就意味着在ViewPager中需要加载几百个view,况且手机拍出来的图片都是1-2千万左右像素的高清大图(笔者手机2千万像素 也就是拍照出来的照片3888*5152),大小也有5-7个兆,ViewPager滑动不了十几张就oom了,

高清网络摄像机主流芯片方案之安霸、德仪和海思对比

(本文由四川艾普视达数码科技有限公司 苏彬.范清华 搜集整理) 高清网络视频监控发展到今天,市场也开始进入真正的高清时代,诸多有实力的高清摄像机厂家的产品线也逐渐完善起来,高清网络视频监控的配套产品有更加丰富和成熟.与此同时困扰很多人的高清网络摄像机与后端平台或者与后端NVR互联互通的问题也在逐渐迎刃而解,这得益于各个方案研发公司.生产厂家.平台商.标准协议组织都不遗余力的在网络摄像机协议对接这块投入了大量精力,使得高清网络摄像机与第三方设备或者软件平台的对接不再像早期那么尴尬.现阶段面向市场的

移动端,多屏幕尺寸高清屏retina屏适配的解决方案

移动端高清.多屏适配方案 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范往往会遵循以下两点: 首先,选取一款手机的屏幕宽高作为基准(以前是iphone4的320×480,现在更多的是iphone6的375×667). 对于retina屏幕(如: dpr=2),为了达到高清效果,视觉稿的画布大小会是基准的2倍,也就是说像素点个数是原来的4倍(对i

主流芯片解决方案Ambarella的高清网络摄像机、德州仪器和控制海思

(本文由四川艾普作为数码科技有限公司 苏斌.范清华 收集) 高清网络视频监控发展到今天.正的高清时代.诸多有实力的高清摄像机厂家的产品线也逐渐完好起来,高清网络视频监控的配套产品有更加丰富和成熟.与此同一时候困扰非常多人的高清网络摄像机与后端平台或者与后端NVR互联互通的问题也在逐渐迎刃而解,这得益于各个方案研发公司.生产厂家.平台商.标准协议组织都不遗余力的在网络摄像机协议对接这块投入了大量精力,使得高清网络摄像机与第三方设备或者软件平台的对接不再像早期那么尴尬.现阶段面向市场的高清推广商以及

css图片高清适配

同一张图片,在普通屏显示正常,但高清屏出现模糊.原因是原来一个像素的点分成的四个像素的点进行了显示. 解决方案:在高清屏中把图片变成二倍图,前提是二倍的高清图已经存在. .icon{ background: url(bg.png) no-repeat; /* 宽200px; */ } @media screen and (-webkit-min-device-pixel-ratio:1.5){ .icon{ background-image: url(bgx2.png); /* 宽400px;

高清屏及适配不同设备的方案总结

关于一些Retina,设备像素,移动适配的知识,网上一搜也是一大把,但是基本的东西并没有变化太多.下面就我看过的一些有关于这方面的知识做一些总结(仅以个人的角度出发,所以有不全的地方还请大家谅解).后面会有不定期的更新~每个知识点我都会在开关写出引用地址,所以大家有不懂的可以看原文章~ 一.关于设备像素比(devicePixelRatio) 出处:高清屏概念解析与检测设备像素比的方法 所谓设备像素比(devicePixelRatio)指的就是设备上物理像素和设备独立像素(device-indep

美女直播的网页Flash推流进行网络高清直播

全民都在直播:每个人都可以通过直播平台分享出去让更多的看到,关注到.尤其目前美女直播秀场的应用,可以说是热火朝天.很多平台都在进行美女秀场直播,打出的口号都各有千秋,又都万变不离其宗.那么看下主流的直播秀场平台: 六间房:超火的娱乐直播平台 秀色直播网:真人视频聊天室 千帆直播:海量性感女主播平台 酷我秀场直播:真人女主播视频直播 爱奇艺奇秀:在线互动娱乐社区:最高清的真人视频直播平台 新浪秀场:最大真人视频直播社区 通过这些口号,不乏总结出来这些平台的特点:娱乐,直播,美女,互动,真人,社区.

移动端高清、多屏适配方案

移动端高清.多屏适配方案 背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范往往会遵循以下两点: 首先,选取一款手机的屏幕宽高作为基准(以前是iphone4的320×480,现在更多的是iphone6的375×667). 对于retina屏幕(如: dpr=2),为了达到高清效果,视觉稿的画布大小会是基准的2倍,也就是说像素点个数是原来的4倍(对i