将自定义图标添加到超赞的字体


138

我喜欢Font Awesome图标字体,并且希望将其用于我网站上的大多数图标,但是除了提供的功能外,我还需要一些自定义svg图标。

我注意到Font .wev的.svg版本主要由以下<glyph />元素组成:

...
<glyph unicode="&#xf0b2;" horiz-adv-x="1536" d="M0 80v477q0 51 24.5 61.5t59.5 -24.5l162 -162l340 338l-338 338l-164 -164q-35 -35 -59.5 -25.5t-24.5 60.5v477q0 31 23 57q27 23 57 23h477q51 0 61.5 -24.5t-24.5 -59.5l-160 -158l338 -338l332 334l-162 162q-35 35 -24.5 59.5t61.5 24.5h477q33 0 55 -23 q25 -25 25 -57v-477q0 -51 -24.5 -61.5t-59.5 24.5l-162 162l-334 -334l338 -336l158 160q35 35 59.5 24.5t24.5 -61.5v-477q0 -35 -25 -55q-23 -25 -55 -25h-477q-51 0 -61.5 24.5t24.5 59.5l166 166l-336 336l-340 -340l162 -162q35 -35 24.5 -59.5t-61.5 -24.5h-477 q-31 0 -55 25q-25 20 -25 55z" />
<glyph unicode="&#xf0c0;" horiz-adv-x="1880" d="M0 852v152q0 18 1 47.5t10 56.5t29.5 46.5t57.5 19.5q-45 29 -71.5 75.5t-26.5 104.5q0 43 16.5 82t46 68.5t68.5 46t82 16.5q45 0 84 -16.5t67.5 -46t46 -68.5t17.5 -82q0 -57 -27.5 -104t-72.5 -76q37 0 57.5 -19.5t29.5 -46.5t11 -56.5t2 -47.5v-152 q-14 -8 -23.5 -18.5t-27.5 -10.5h-328q-16 0 -26.5 10.5t-22.5 18.5zM158 57v387q0 78 45 138.5t98 109.5q10 10 25.5 21.5t33.5 15.5q18 6 41 7t45 5q61 10 130 19.5t135 19.5q-90 57 -144.5 151.5t-54.5 207.5q0 88 34 166.5t92 136t136 91.5t166 34t166 -34t136 -91.5 t92 -136t34 -166.5q0 -113 -54 -207t-145 -152q66 -10 134.5 -19t130.5 -20q23 -4 45 -5t41 -7q18 -4 33.5 -15.5t27.5 -21.5q66 -59 103.5 -116.5t37.5 -131.5v-387q-12 -6 -20 -13t-18.5 -14t-23.5 -14.5t-36 -15.5h-1368q-35 0 -54.5 22.5t-43.5 34.5zM1452 852v152 q0 18 2 47.5t11.5 56.5t30 46.5t56.5 19.5q-45 29 -72.5 75.5t-27.5 104.5q0 43 16.5 82t46 68.5t68.5 46t84 16.5q43 0 82 -16.5t68.5 -46t46 -68.5t16.5 -82q0 -57 -26.5 -104t-71.5 -76q37 0 56.5 -19.5t28.5 -46.5t11 -56.5t2 -47.5v-152q-12 -8 -22.5 -18.5 t-26.5 -10.5h-328q-18 0 -27.5 10.5t-23.5 18.5z" />
<glyph unicode="&#xf0c1;" horiz-adv-x="1597" d="M0 1137q0 88 34 166.5t92 137t136 92.5t168 34q86 0 166 -33t139 -92q8 -8 21.5 -20.5t26 -25t21.5 -25.5t9 -25q0 -18 -12 -31q-6 -8 -25 -12q-47 -10 -88 -22.5t-86 -31.5q-4 -4 -16 -4t-25.5 10.5t-31 21.5t-42 21.5t-57.5 10.5q-35 0 -66.5 -13.5t-54 -37t-36 -54 t-13.5 -67.5q0 -41 17.5 -75t43 -63.5t56.5 -56.5t57 -53l180 -178q23 -25 54.5 -37t66.5 -12q43 0 73 16t46 16q12 0 39 -21.5t55.5 -49t50 -55t21.5 -42.5q0 -29 -36 -51t-83 -38.5t-94 -26t-72 -9.5q-86 0 -164.5 33t-140.5 92l-303 305q-61 59 -94 139.5t-33 166.5z M578 1010q0 29 35.5 51t82.5 38.5t94 26t72 9.5q86 0 166 -33t139 -92l303 -305q61 -59 94 -139.5t33 -166.5q0 -90 -33.5 -167.5t-92 -136t-137.5 -92.5t-167 -34q-86 0 -165.5 34t-139.5 93q-8 8 -21.5 19.5t-25.5 25t-21.5 26.5t-9.5 26q0 18 13 28q6 8 24 12 q47 10 88 22.5t86 33.5q12 4 17 4q12 0 25.5 -10.5t30.5 -21.5t41 -21.5t58 -10.5q72 0 121 49.5t49 120.5q0 41 -17 76t-44 63.5t-56.5 55.5t-56.5 53l-178 180q-53 49 -123 50q-43 0 -72.5 -17.5t-46.5 -17.5q-12 0 -38.5 21.5t-55 49t-50 56t-21.5 41.5z" />
...

将我的svg图标代码,将其粘贴为新的字形元素并分配未使用的unicode字符是否有效?


2
您找到解决方案了吗?还是您只是选择了另一个塞子?
米歇尔·艾尔斯

1
找不到“ .svg版本的Font Awesome”的链接。请更新。
Yannis Dran 2014年

Answers:


125

Icomoon一试。您可以上传自己的SVG,将它们添加到库中,然后创建将FontAwesome与您自己的图标结合在一起的自定义字体。


谢谢:)这很有帮助!
Johnny Zhao

优质的服务。感谢那。在短时间内从svgs生成了一个自定义图标集。
Nodoze

好工具。完美。:)
克里斯蒂安·马克

2
嗨,我用包含svg图标的文件夹生成了字体图标。但是稍后我想向其中添加一个图标,是否可以添加?还是我必须用该文件夹生成?
Varadha31590 '16


21

在Font Awesome 5中,您可以使用自己的SVG数据创建自定义图标。这是一个演示GitHub存储库,您可以使用。而且这里有一个CodePen,说明如何类似的东西可能是在做<script>块。

无论哪种情况,它都只是涉及使用library.add()来添加这样的对象:

export const faSomeObjectName = {
  // Use a prefix like 'fac' that doesn't conflict with a prefix in the standard Font Awesome styles
  // (So avoid fab, fal, fas, far, fa)
  prefix: string,
  iconName: string, // Any name you like
  icon: [
    number, // width
    number, // height
    string[], // ligatures
    string, // unicode (if relevant)
    string // svg path data
  ]
}

请注意,在代码示例中,用注释“ svg路径数据”标记的元素将被分配为作为的子元素的元素的d属性值。这样(为清楚起见,省略了一些细节):<path><svg>

<svg>
  <path d=SVG_PATH_DATA></path>
</svg>

(改编自我的类似答案:https : //stackoverflow.com/a/50338775/4642871


如果我们想使用标准前缀,以便新的svg可以放入网站,该怎么办?
诺伯特·卡多斯

1
您可以使用任何喜欢的前缀。但是如果你使用一个标准的前缀(fabfasfarfal)你会在一个命名冲突,如果不是更大的风险,现在,则有可能在未来,我们将继续与这些标准前缀添加图标。使用自定义前缀不会使svg不太可能“适合该网站”,但我不确定您所说的是什么意思,所以也许您可以澄清一下?
mwilkerson

我们需要一个已经要求的特定社交品牌图标(拥有2亿多用户)。我们希望将此svg图标添加到专业版中,以便在网站上使用它,而不会造成html / css例外/其他情况。所有其他品牌都已经具有图标,因此元素上存在fab类(并且实际选择的品牌被动态添加到CSS中)
Norbert Kardos,

1
是的,使用标准前缀添加自定义图标会很好。请记住,如果图标名称最终与我们稍后在该前缀中添加的名称相同,则会发生冲突。因此,也许选择一个不太可能发生冲突的图标名称?分叉的CodePen演示:codepen.io/fontawesome/pen/pZWXYX
mwilkerson

我的SVG来自adobe AI文件,并且具有多个路径。这使我无法正确设置上面指定的“ d”参数。我必须先将AI文件转换为复合路径,然后再将其导出为SVG。我学会了如何做到这一点的位置:graphicdesign.stackexchange.com/questions/35054/...
亚历Standiford

18

取决于您所拥有的。如果您的svg图标只是一条路径,那么只需将'd'属性复制到新的<glyph>元素即可轻松添加该字形。但是,需要将路径缩放为字体的坐标系(EM正方形,通常为[0,0,2048,2048]-Truetype字体的标准),并与所需的基线对齐。

但是,并非所有浏览器都支持svg字体,因此,如果您希望它在任何地方都可以工作,则还必须将其转换为其他格式。

Fontforge可以导入svg文件(选择字形插槽,依次选择“文件”>“导入”,然后选择您的svg图像),然后可以转换为所有相关的字体格式(svg,truetype,woff等)。


18

我建议您将图标与FontAwesome分开,并创建和维护自己的自定义库。就个人而言,如果您要创建自己的图标库,我认为将FontAwesome分开保存要容易得多。然后,您可以将FontAwesome从CDN加载到您的站点中,而不必担心使其保持最新状态。

创建自己的自定义图标时,请通过Adobe Illustrator或类似软件创建每个图标。创建图标后,将每个图标分别以SVG格式保存在计算机上。

接下来,前往IcoMoon http,它拥有最好的字体生成软件(我认为),并且它是免费的。IcoMoon将允许您导入单个SVG-保存的字体到字体库,然后生成您的自定义图标图形库中eotttfwoff,和svgIcoMoon不生成的一种格式是woff2

在生成图标包后 IcoMoon,转到FontSquirrelhttp//fontsquirrel.com并使用其字体生成器。使用ttfIcoMoon生成的文件。现在,在创建的新生成的图标包中,您将具有woff2格式的图标包。

确保文件eotttfsvgwoff,和woff2都是相同的名称。您正在从两个不同的网站/软件生成图标包,并且它们确实以不同的方式命名其生成的输出。

您将在两个位置都为图标包生成CSS。但是在IcoMoon生成的CSS 不会woff2在您的@font-face {}声明中包含该格式。将CSS添加到项目时,请确保添加以下内容:

@font-face {
    font-family: 'customiconpackname';
    src: url('../fonts/customiconpack.eot?lchn8y');
    src: url('../fonts/customiconpack.eot?lchn8y#iefix') format('embedded-opentype'),
         url('../fonts/customiconpack.ttf?lchn8y') format('truetype'),
         url('../fonts/customiconpack.woff2?lchn8y') format('woff'),
         url('../fonts/customiconpack.woff?lchn8y') format('woff'),
         url('../fonts/customiconpack.svg?lchn8y#customiconpack') format('svg');
    font-weight: normal;
    font-style: normal;
}

请记住,您可以使用来获取图标包中每个图标的字形unicode值。 IcoMoon软件获取。这些值有助于通过CSS分配图标,例如(假设我们在上面font-family的示例中使用的是声明的@font-face {...}):

selector:after {
    font-family: 'customiconpackname';
    content: '\e953';
    }

e953如果svg在文本编辑器中打开font-pack生成的文件,则还可以获得字形unicode值。例如:

<glyph unicode="&#xe953;" glyph-name="eye" ... />

不工作,。,。完成整个过程,只是没有显示图标,而是显示数字
Inzmam ul Hassan'1

1
你能再详细点吗?很高兴为您解决问题。您指定font-family: customiconpack;selector:after吗?现在让我为selector:after代码示例更新我的解决方案。
Pegues

我上传了我的图标svg文件,我下载了文件,..,我在项目中添加了新的CSS文件到项目中,将您的代码复制到了文件中,并用我的图标代码更改了代码。没用,。
Inzmam ul Hassan'1

1
请加入我创建的这个聊天室,以便我们可以更轻松地讨论问题:chat.stackoverflow.com/rooms/132402/…–
Pegues

2
我在这里发表评论只是为了让其他人知道问题是您是通过导入的PNG在Illustrator中创建了SVG。您必须重新创建您的图标作为矢量。PNG是栅格格式,没有矢量曲线。
Pegues

13

与@Samuel-bergström类似的方法:

  • 下载Fontawesome SVG https://github.com/FortAwesome/Font-Awesome/blob/master/src/assets/font-awesome/fonts/fontawesome-webfont.svg
  • 下载FontForge http://fontforge.github.io/en-US/downloads/
  • 下载Inkscape
  • 打开Inskscape并创建一个单层形状作为您的新字体图标
  • 保存SVG文件,关闭Inkscape
  • 打开FontForge(如果您有多个监视器,请使用Windows-LeftArrow进行重新定位,因为它们具有关闭监视器的奇怪的SWING Java窗口以及弹出窗口的模态问题-我必须检查一些任务栏)
  • 档案| 打开fontawesome-webfont.svg
  • 档案| 进口
  • 滚动到底部,右键单击图标|。字形信息
  • 将字形名称更新为uniFXXX(XXX类似于501,比FontAwesome v4.5中使用的最高Unicode数字高)
  • Unicode Vlaue U + fXXX
  • 点击确定
  • 档案| 保存
  • 档案| 生成字体...
  • 关闭FontForge
  • 打开您的网络项目
  • 将字体文件复制到(在我的项目中)“ \ Content \ fonts \”文件夹中。
  • 编辑“ \ Content \ styles \ fa \ path.less”,如下所示:

@font-face {
      font-family: 'FontAwesome';
      //src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
      src: 
    	//url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
        //url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
        url('@{fa-font-path}/fontawesomeregular.woff?v=@{fa-version}') format('woff'),
        url('@{fa-font-path}/fontawesomeregular.ttf?v=@{fa-version}') format('truetype'),
        url('@{fa-font-path}/fontawesomeregular.svg?v=@{fa-version}#fontawesomeregular') format('svg');
    //  src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
      font-weight: normal;
      font-style: normal;
    }

我知道注释掉其他文件类型可能有争议,但是很高兴听到如何在注释中生成.eot或.otf文件。

  • 最后,如Samuel所提到的,用以下内容更新CSS / LESS:

    .fa-XXX:在{内容前:“ \ f501”; }


3

我对SVG网络字体和字体创建进行了一些研究,在我眼中,如果您想将字体“添加”到超棒的现有字体中,则需要执行以下操作:

转到inkscape并创建一个字形,将其另存为SVG,以便阅读代码,并确保为其分配一个unicode字符(当前不使用该字符),以免与字体中的任何现有字形冲突。这可能很难,所以我认为更好的方法是用您自己的字形替换现有字形(只需选择一个您不使用的字形,复制第一部分:

保存svg,然后使用任何在线转换器将其转换为网络字体,以便您的网络字体可在所有浏览器中使用。

完成此操作后,您应该已替换了其中一个字形的SVG,在这种情况下您已完成。如果不是,则需要为新的字形创建CSS,在这种情况下,请尝试重复使用FA现有的CSS,仅添加

>##CSS##
>.FA.NEW-GLYPH:after {
>content:'WHATEVER AVAILABLE UNICODE CHARACTER YOU FOUND'
>(other conditions should be copied from other fonts)
>}

2

如果您希望字体很棒的一些图标(或全部)包括您的自定义svg图标,则可以:

1-转到http://fontawesome.io/下载zip并将其解压缩,例如在您的桌面中。

2-转到http://fontastic.me/,使用您的电子邮件创建一个帐户。

3-登录后,单击标题选项:“添加更多图标”。

4-选择位于提取的zip字体内的font-awesome的SVG。

5-重复上传自己的svg文件的过程。

6-内部首页(在页面顶部)选择要下载的图标,对其进行自定义以提供您的自定义名称,然后选择发布以具有链接或下载字体和CSS。

对不起我的英语!:D


那会起作用,但我认为创建自己的自定义图标库并使用fontawesome更好。它将允许更新fontawesome(带有新图标)。
纪尧姆·哈拉里
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.