最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
实现跨浏览器的图标SVG Sprites的教程
时间:2022-06-25 18:20:27 编辑:袖梨 来源:一聚教程网
基于本文的目的,我会以一个像个人名片的东西来开始。它会简短地介绍一下我自己以及显示3个和我工作相关的网络档案。
从上面的截图你可以看到我使用了三个图标(Twitter,Dribble 和 Github)象征着我的网络档案。这些图标我是从 flaticon 下载到的,这是一个具有各种不同图标和符号的网站,并且每个图标都提供矢量和光栅格式。
PNG 和 SVG
我们会在支持SVG的浏览器中使用SVG的格式,然后在不支持svg的浏览器中使用PNG格式的图标。
通常我使用Sketch来输出我的PNG图标和SVG图标。
简单的SVG实现
在上面的截图中你会注意到我将分组和图形都在左侧面板进行了适当的命名。(Adobe Illustrator在图层面板中有个相似的视图)。将资源正确地命名是很重要的,这不仅仅让它们保持组织性,更是对后面的图标使用有很大帮助。
输出SVG
现在我会将这些图标输出为SVG格式,我们可以用Sketch的slicing工具来轻松地完成这项工作。在Sketch的输出配置选项中你可以得到更多的信息从而明白它是如何工作的。我会将它们输出为单独的文件并放置在我项目中的images目录中。
通常地,你要在网站中展示一张图片你需要通过一个元素的src属性中来指向这个资源,类似下面这样:
然而,对于SVG来说我们可以有几种不同的方法来在HTML文档中使用它们。举个例子,我们可以使用直观的SVG代码来描述一张图片。代码可能会是这样:
这是我上面输出的其中一个图标,是基于XML的格式的呈现。这些代码几乎就像一段HTML一样,这意味着我们可以插入这段代码到页面中。
在HTML中添加inline SVG
让我们以一个基础的HTML页面开始,里面包含了3个赋予了链接的PNG图标,以及它们的容器:
现在我会开始复制上面SVG图标代码并黏贴到这里面,但我会忽略这段说明文件编码方式和其他信息的代码。因为在HTML文档中已经包含了这部分的信息,我们无需复制进去。
在这个HTML页面中,我已经将SVG放在了PNG图标的正上方。现在我要把PNG图片的代码注释掉防止它再SVG图片后面再出现一次。
清理 SVG
接着我准备清理一下上面的SVG代码。移除掉那些可选的元素属性,因为我要移除的这些属性并不会影响SVG的表现。下面是优化后跟优化前的代码对比,但他们表现效果是一样的:
注意我移除的那些元素。
这部分的最后一步就是移除掉SVG标签上的height和width属性。它们会在我的CSS文件中来定义,如下所示:
.icon {
max-
max-
transition: .2s;
-webkit-filter: drop-shadow(0 1px 0 #11222d);
}
如果你跟着我的步骤你应该能在浏览器看到一个简洁锐利的矢量图。
提示:你可以通过浏览器的放大缩小来看看这个图片是否为SVG。这个图片不应该会受到你浏览器放大缩小而产生变化。
提供Fallback
如果你使用svg来在客户端显示,你会想它的浏览器支持程度如何,实际上svg可以在除了ie8(和ie8以下的)以及 Opera Mini 以外的所有浏览器上工作。但就目前来说,ie8在全球中只占到了4%的份额,Opera Mini 只有3%的份额。所以你没必要去为他们提供兼容,但尽管如此我还是会给给你一个解决方案。
这是我上面3个图标中的其中一个图标,但你会注意到我的png图标也在里面,只是以注释地形式存在着。这个png图片就是我们的fallback。
干掉注释
首先我会移除掉上面的注释。我需要将移动到