应该了解的 Web 图标解决方案

超级产品经理

SVG Symbol

我这里使用的是 https://segmentfault.com/a/svg-symbol 方案来合并 svg。

还有一个合并方法是 https://segmentfault.com/a/SVG defs,这个比 SVG Symbol 要鸡肋很多,在此就不介绍了。

通过使用 https://segmentfault.com/a/gulp-svg-symbols 来把 svg 文件合并:

var gulp = require('gulp');
var svgSymbols = require('gulp-svg-symbols');

gulp.task('sprites', function () {
return gulp.src('assets/svg/*.svg')
.pipe(svgSymbols())
.pipe(gulp.dest('assets'));
});
最终得到的 svg 文件:

使用方法

在 HTML 文件中声明 svg,然后通过 来使用:

你也可以通过 来直接使用存储在 CDN 上的 svg 文件,如果感觉每个都要写 CDN 的地址太麻烦,则可以封装 JS 工具,统一维护,统一管理。

inline SVG 目前没有什么特别推荐的开源解决方案,一般情况下,图标都是自己的,自己通过工具打包就已经很方便了,而且很难通过纯 CSS 或 JS 来解决,因为它跟 HTML 的关联性太大了,即使是这样,还是推荐一个库给大家了解了解:

https://segmentfault.com/a/SVGInjector

IconFont 与 inline SVG 方案对比

浏览器兼容性

IconFont
inline SVG

IE6+
IE9+ , Android 3.0+ 移动端支持很好,现在可以使用

尺寸、颜色是否容易控制

IconFont
inline SVG

浏览器会认为它是一个字体,因此只能使用 color 和 font-size 控制,而且尺寸特别不精细
支持多色、局部颜色控制、控制尺寸使用 width 和 height

访问的稳定性

IconFont
inline SVG

Font 在 CDN 上会有跨域问题;而且字体下载不下来是很常见的事;还有一些https://segmentfault.com/a/已知的Chrome的Bug ;貌似代理性质的浏览器,像 UC ,就不支持自定义 Font;一些浏览器拦截插件会拦截自定义字体......
Svg很正常

语义化

IconFont
inline SVG

根本不语义化,你要写多余没有意义的标签,对 SEO 很不利
Svg 是图形,人家就是图形,而且 SVG Symbol 支持 title 和 description 属性,非常友好

用起来是否顺滑

IconFont
inline SVG

自己生成 svg 然后使用工具打包成多个字体文件,然后用 unicode 对应使用
SVG Symbol 使用打包工具生成 SVG 集合,直接通过 ID 使用

IconFont 与 SVG 的 Demo

https://segmentfault.com/a/请去我的CodePen

总结

如果,你的产品需要支持 IE8 及以下,还是推荐使用 IconFont ,因为使用 SVG Symbol 的话,你需要考虑在低端浏览器下的兼容性,常见的做法是,生成一些 png 的图片做 fallback,然后在低端浏览器下显示,把 svg 隐藏.....

如果,你只需要考虑 IE9+ 和 Android 3.0 + ,毫无疑问,inline SVG 是唯一选择!

关键字:前端开发, css, html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部