字体真棒4和5在同一页面

时间:2018-03-24 17:42:50

标签: icons font-awesome

当使用2个不同的css版本时,我与字体很糟糕。我不是试图使用2个不同的版本,但我的插件嵌入了一个版本,有时一个wordpress网站有另一个版本。

我对这个特定的例子很感兴趣,为什么在第一个图标显示时它们是否相同:在内容之前?

(我注意到如果fa5首先链接到页面中,它就有效)

处理此事的最简单的解决方案是什么?

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://use.fontawesome.com/releases/v5.0.8/css/all.css" rel="stylesheet"/>

<i class="fa fa-facebook"></i>

<i class="fab fa-facebook-f"></i>

https://jsfiddle.net/pfbx5865/1/

3 个答案:

答案 0 :(得分:2)

您实际上可以使它们协同工作,但是,您将不得不为其中之一编辑CSS,并为每个图标赋予一个新的不冲突的CSS名称。

步骤1:在本地安装两个库。

将它们分别安装在单独的目录中,并分别命名为fa4和fa5(或您要调用的目录名称,以便于区分它们)。您不能使用CDN来工作。

步骤2:编辑一个版本的Font Awesome

选择要编辑的哪个版本的Font Awesome。就我而言,我已经在使用版本4,所以我决定编辑版本5。

在CSS ...中将.fa的每个实例更改为.fa5,除了字体文件名。

示例:

.fa-xs {
  font-size: .75em; }

成为

.fa5-xs {
  font-size: .75em; }

示例2:

.fa,
.fas,
.far,
.fal,
.fad,
.fab {
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  display: inline-block;
  font-style: normal;
  font-variant: normal;
  text-rendering: auto;
  line-height: 1; }

成为

.fa5,
.fas,
.far,
.fal,
.fad,
.fab {
  -moz-osx-font-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
  display: inline-block;
  font-style: normal;
  font-variant: normal;
  text-rendering: auto;
  line-height: 1; }

警告:请勿更改字体文件的引用!

即使名称中有fa,也不要更改。

.fab {
  font-family: 'Font Awesome 5 Brands';
  font-weight: 400; }
@font-face {
  font-family: 'Font Awesome 5 Free';
  font-style: normal;
  font-weight: 400;
  font-display: block;
  src: url("../webfonts/fa-regular-400.eot");
  src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); }

您必须引用实际的文件名,并且文件名不重要,因为它们位于不同的目录中。

第3步:将CSS链接添加到您的头部

<head>
...
<link href="fa/css/font-awesome.css" rel="stylesheet"> <!-- load all FA4 styles --> 
<link href="fa5/css/all.css" rel="stylesheet"> <!-- load all FA5 styles --> 
...
</head>

第4步:调用“普通”之类的图标

一种调用方式如下:

<i class="fa fa-chart-bar-o"></i> <!-- Font Awesome 4 Version of Chart -->
<i class="fa5 fa5-chart-bar"></i> <!-- Font Awesome 5 Version of Chart -->
<i class="fab fa5-cc-discover"></i> <!-- Font Awesome 5 Brand Icon for Discover -->

请注意,您必须将fab用于品牌图标。

如果采用这种方式,则完全没有冲突,并且可以将整个库用于这两个集合。

答案 1 :(得分:1)

不幸的是,我对如何使它们并行工作没有很好的建议 - 感觉就像一堆蠕虫,我会尽量避免这种情况。你说的是“我的插件” - 这是否意味着你开发了它?如果我控制了代码并且我知道它可能在两个环境中使用,我会添加一个config-option来选择FA4-或FA5-environment,然后创建相应的标签。

WRT第一个图标未显示在您的示例中:您说如果以相反的顺序加载脚本,您会注意到相反的效果。你的答案已经存在:.css文件对.fa-class有不同的定义。我想那个破坏你样本的那个(来自https://use.fontawesome.com/releases/v5.0.8/css/all.css

.fa,.far,.fas{
    font-family: Font Awesome\ 5 Free;
}

与此相反(来自FA4):

.fa{
  display: inline-block;
  font: normal normal normal 14px/1 FontAwesome;
  font-size: inherit;
  text-rendering: auto;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
 }

答案 2 :(得分:1)

可以同时使用两个库,只需记住:样式表加载了后者的“ wins”。首先加载FA5,然后让FA4覆盖FA4类更有意义。然后大多数图标将按预期显示。

下面的代码段说明了如何使用两个库。每当使用FA4类时,都会呈现FA4样式。每当使用FA5类时,都会呈现FA5样式。如果以其他方式(首先是FA4)加载它,则所有内容都将呈现为FA5样式,如果您现在拥有FA5品牌子集(fab)中的FA4图标定义,则该样式将不起作用。

不幸的是,在您的示例中,您还错过了Facebook图标类末尾的-f,应该是fa fa-facebook-f。如果您解决了此问题,然后交换了库的加载(首先加载FA5),则可以正常工作。

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<label>Facebook à la 4.7</label>
<i class="fa fa-facebook-f"></i>
<br>
<label>Facebook à la 5</label>
<i class="fab fa-facebook-f"></i>