用SVG 制作 Sprites的图标系统(一)

简介: 我一直是图标字体的大力支持者。很多网站真的需要一个图标系统,图标字体提供了一个该死的精细系统。但是,我认为假设你对 IE 9+ 很好,使用内联 SVG 并且 <use> 引用图标的元素是一个优秀的系统。

我一直是图标字体的大力支持者。很多网站真的需要一个图标系统,图标字体提供了一个该死的精细系统。但是,我认为假设你对 IE 9+ 很好,使用内联 SVG 并且 <use> 引用图标的元素是一个优秀的系统。

首先让我们介绍它的工作原理。

处理图标的一个好方法是让文件夹中包含大量.svg文件。

C~(BKSVIQH6G([`@G@]TE]J.png

这是使用SVG的一个很酷的事情 - 它们是源文件。

它们可以是彩色的,而不是彩色的,多种形状,尺寸等等。

K4LJID2N_5_HD5FU(KU[_0B.png

你可以让 Illustrator(或其他任何软件)保存它,享受其带来的所有瑕疵:
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     width="100px" height="100px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
<g>
    <path d="M50.049,0.3c14.18,0.332,25.969,5.307,35.366,14.923S99.675,36.9,100,51.409c-0.195,11.445-3.415,21.494-9.658,30.146 - yadda yadda yadda"/>
</g>
</svg>


合并.svg文件


如果需要,可以手动执行此操作。我做到了 您甚至不必查看最终文件。只是称之为 svg-defs.svg或其他。

它应该只是一个 <svg> 标签,带有<defs>标签(这意味着你要定义以后要使用的东西),然后是一堆<g>(组)标签。每个<g>标记都有一个唯一的ID,包含每个图标的所有路径和诸如此类的东西。

<svg>
  <defs>
    <g id="shape-icon-1">
      <!-- all the paths and shapes and whatnot for this icon -->
    <g>
    <g id="shape-icon-2">
      <!-- all the paths and shapes and whatnot for this icon -->
    <g>
    <!-- etc -->
  </defs>
</svg>
事实证明<symbol>可能是一个更好的选择<g>。参考关于它的内容!

可以手工完成,但当然这有点费力。Fabrice Weinberg创建了一个名为grunt-svgstore的Grunt插件,可自动执行此操作。

如果从未使用过Grunt,那么您可以这样做。这是一个可以帮助入门的截屏视频。

你可以安装它:

 

npm install grunt-svgstore --save-dev

确保该任务可用于:

 

grunt.loadNpmTasks('grunt-svgstore');

然后在配置中:

svgstore: {
  options: {
    prefix : 'shape-', // This will prefix each <g> ID
  },
  default : {
      files: {
        'dest/svg-defs.svg': ['svgs/*.svg'],
      }
    }
  }
},

在输出文件中svg-defs.svg,每个图标(来自源.svg文件的任何路径和内容)将被包装在<g>带有唯一的前缀ID和文件名(减去.svg)的标记中。喜欢:

<g id="shape-codepen">

将SVG注入文档顶部

字面上包括它,如:

<!DOCTYPE html>
<html lang="en">
<head>
  ...
</head>
<body>
  <?php include_once("processed/svg-defs.svg"); ?>

或者你想要那样做。

遗憾的是,它必须位于顶部,因为有一个Chrome错误,如果稍后定义,这将无法正常工作。虽然......这个故事还有更多内容,因为当我输入这些单词时,这个网站使用的主题是在文档底部定义的图标,并且它有效。Ughkgh很困惑。


随时随地使用图标


现在你可以在任何地方使用它们!喜欢:

<svg viewBox="0 0 100 100" class="icon shape-codepen">
  <use xlink:href="#shape-codepen"></use>
</svg>
请注意,grunt-svgstore现在正在使用,<symbol>因此您甚至不需要使用viewBox!确保在svg上使用这些类名来调整它的大小。
/* Do whatever makes sense here.
   Just know that the svg will be an 
   enormous 100% wide if you don't 
   reign in the width. */
.icon {
  display: inline-block;
  width: 25px;
  height: 25px;
}


Yay:你可以用CSS设置它们(和它们的部分)的样式

我们喜欢图标字体的原因之一是能够使用CSS设置样式。这项技术可以让我们尽我们所能,而且更多,因为:

  1. 我们可以设计所有单独的部分
  2. SVG有更多你可以控制的东西,比如特殊的过滤器和笔画

svg(有点像是)在DOM中,所以也可以用JavaScript。这里有一些造型可能性的各种演示:

codepen.io点击预览
<svg viewBox="0 0 100 100" class="icon shape-codepen">
  <use xlink:href="#shape-codepen"></use>
</svg>
<svg viewBox="0 0 100 100" class="icon shape-codepen-2">
  <use xlink:href="#shape-codepen"></use>
</svg>
<br>
<svg viewBox="0 0 100 100" class="icon shape-youtube">
  <linearGradient id="gradient"  gradientUnits="userSpaceOnUse" x1="0%" y1="0%" x2="0%" y2="100%">
<stop stop-color="#FF0000" offset="0"/><stop stop-color="#571C1C" offset="1"/>
</linearGradient>
  <use xlink:href="#shape-youtube"></use>
</svg>
<br>
<svg viewBox="0 0 100 100" class="icon shape-twitter">
  <use xlink:href="#shape-twitter"></use>
</svg>
<svg viewBox="0 0 100 100" class="icon shape-twitter-2">
  <use xlink:href="#shape-twitter"></use>
</svg>
<svg viewBox="0 0 100 100" class="icon shape-twitter-3">
  <use xlink:href="#shape-twitter"></use>
</svg>
Result
EDIT ON
.hide {
  display: none;
}
.icon {
  width: 75px;
  height: 75px;
}
body {
  padding: 20px;
}
/* Targeting inside only */
.outer-ring {
  fill: #999;
}
.inner-logo {
  fill: #666;
}
.shape-codepen-2 {
  -webkit-filter: drop-shadow(5px 5px 2px #ccc); 
  filter: drop-shadow(5px 5px 2px black);
}
.shape-youtube {
  fill: url(#gradient);
}
.shape-twitter-2 {
  fill: #55ACEE
}
.shape-twitter-3 {
  fill: red;
}


请参阅CodeCen上的Chris Coyier(@chriscoyier)的Pen EBHlD。


另一种方式:IcoMoon

IcoMoon以生成图标字体而闻名,实际上也可以很好地生成SVG精灵。选择所需的所有字体后,单击底部的SVG按钮,您将获得该输出,包括带有内联SVG方法的演示页面。

U%)9Y_V6(O1DC0B]0@SEO3S.png



相关文章
|
5月前
|
前端开发
css3制作鼠标悬浮图文动画效果
css3制作鼠标悬浮图文动画效果
33 0
|
8月前
|
移动开发 前端开发 HTML5
前端 HTML5 Svg 画板(支持视频、图片上涂鸦,支持缩放、修改、颜色、复选...)
前端 HTML5 Svg 画板(支持视频、图片上涂鸦,支持缩放、修改、颜色、复选...)
178 0
|
前端开发 JavaScript
一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效
华丽炫酷的动画特效总能够让人心旷神怡,不能自已。艳羡之余,如果还能够探究其华丽外表下的实现逻辑,那就是百尺竿头,更上一步了。本次我们使用图片、SCSS样式以及SVG图片动画来实现“点赞”按钮的动画特效,并比较不同之处。
一颗红心,三手准备,分别基于图片(img)/SCSS(样式)/SVG动画实现动态拉轰的点赞按钮特效
|
图形学
PPT制作三大技巧:图标 、图片背景透明和自动函数
PPT制作三大技巧:图标 、图片背景透明和自动函数
243 0
PPT制作三大技巧:图标 、图片背景透明和自动函数
|
前端开发
css sprite雪碧图制作,使用以及相关,图文gif。
在网页制作中,雪碧图也是前端攻城狮必须掌握的一项小技能。百度词条对雪碧图的解释是:CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分。本文主要内容包括雪碧图如何制作,雪碧图优缺点,哪些场景需要使用雪碧图。 实现原理: CSS雪碧的基本原理是把你的网站上用到的一些图片整合到一张单独的图片中,从而减少你的网站的HTTP请求数量。该图片使用CSS background和background-position属性渲染,这也就意味着你的标签变得更加复杂了,图片是在CSS中定义.
277 0
css sprite雪碧图制作,使用以及相关,图文gif。
|
前端开发 JavaScript
SVG + 动画 实现一个有个性的404页面
我正在参加 码上掘金体验活动,详情:[show出你的创意代码块],我们的博客网站有时候 404页面比较普通,我们可以通过SVG 加动画来实现一个有个性的页面。
155 0
|
前端开发 容器
CSS 奇思妙想 | 使用 resize 实现强大的图片拖拽切换预览功能
CSS 奇思妙想 | 使用 resize 实现强大的图片拖拽切换预览功能
312 0
CSS 奇思妙想 | 使用 resize 实现强大的图片拖拽切换预览功能
|
Web App开发 缓存 前端开发
用SVG 制作 Sprites的图标系统(二)
我一直是图标字体的大力支持者。很多网站真的需要一个图标系统,图标字体提供了一个该死的精细系统。但是,我认为假设你对 IE 9+ 很好,使用内联 SVG 并且 <use> 引用图标的元素是一个优秀的系统。
191 0
|
前端开发
用CSS制作带图标的按钮
这是一个搜索按钮,带了一个搜索的小图标。写的CSS在IE6和IE7中的兼容性不是很好。四边的圆角使用了CSS3的属性。
用CSS制作带图标的按钮
|
前端开发 数据可视化 开发工具
Tooltips提示框的视觉效果:SVG方案实现
Tooltips常被称为提示框(或信息提示框),提示框能够以较强的交互性、自由度为用户提供相应的提示信息。
Tooltips提示框的视觉效果:SVG方案实现