【问题标题】:Unicode CSS Font Awesome Icons Rendering as Boxes in ReactUnicode CSS 字体真棒图标在 React 中呈现为框
【发布时间】:2020-05-31 17:06:23
【问题描述】:

我在 create-react-app 中使用 jPlayer example。这是一个 CodeSandbox,显示了字体真棒图标呈现为框的问题。

图标通过 css 规则呈现,将内容指定为带​​有 fa 类的 <i> 标记的 unicode。

我安装了 jPlayer 示例的 package.json 中的 font-awesome 依赖项。然后,我实现了一个 AudioPlayer 组件并使用了 jPlayer 提供的皮肤。组件渲染了但是图标都是框,我可以在源码中看到unicode内容。

这是项目架构的示例。这是/src/AudioPlayer/AudioPlayer.jsx中的播放按钮。

<Play><i className="fa">{/* Icon set in css */}</i></Play>

然后,AudioPlayer 被导入App.jsxApp.jsx 导入具有此相关规则的样式表:

.fa, .fas, .far {
    font-family: FontAwesome !important;
}

App.jsx 然后由index.js 渲染。在index.js 中,我们导入音频播放器的样式表:

// Styles the jPlayer to look nice
import 'react-jplayer/dist/css/skins/sleek.min.css';
// Styles Play/Pause/Mute etc when icons (<i />) are used for them
import 'react-jplayer/dist/css/controls/iconControls.min.css';

iconControls.css 中播放按钮的规则如下所示:

.jp-jplayer .jp-icon-controls .jp-play i:before {
  content: "\F04B";
  font-family: 'Font Awesome\ 5 Free';
  font-weight: 900;
}

然后在index.htmlhead 中,我将字体真棒CDN 包括作为修复正在呈现的框而不是字体真棒图标的最后尝试。

【问题讨论】:

  • 记得在点击提交按钮后查看您的帖子,以防万一您的降价格式错误。你做了什么。很容易修复,但其他人不应该为你这样做。
  • 抱歉,我没有看到格式错误
  • 你有正确使用块格式的代码块,然后你有使用内联格式的代码块,所以不是一个很好的“多行代码”的全宽块,它只是段落文本。
  • 哦,我明白了,jPlayer 样式表的导入是逐行的。
  • 你的多行 CSS 也应该是一个块。请记住,这不是 github,所以有 its own markdown rules。还有更多 "asking a good question" 注意:请不要让别人克隆你的项目,你有责任确保你的帖子包含所有必要的细节,以便对你遇到的问题做出明智的评论,所以你可能需要改为形成minimal reproducible example。尤其是因为您的代码不会很快就会出现这个问题,所以该链接很快就会对网站的未来访问者毫无用处,他们会以与您相同的方式寻找答案。

标签: css reactjs unicode font-awesome


【解决方案1】:

字体字符在以下情况下显示为空心方块:

  1. 字体文件中不存在指定的 Unicode 字符。
  2. 找不到请求的字体文件,并且没有指定回退。

由于它的 Font Awesome,没有备用字体,并且请求的字符在大多数字体中都不存在。所以你遇到了双重问题。

当浏览器由于路径问题而找不到字体文件时,几乎总是会发生这种情况。我会查看您的 CSS 以查找请求 @font-face 的位置并修复与您的项目匹配的路径。我猜这是在播放器 CSS 文件中,并且它期望是不是来自 CDN 的本地文件。

另外,请注意,Webpack 有时会移动文件并更新 CSS 中的路径,因此您可能需要将它们移动到“静态”目录并根据需要更改路径。

最后,您应该检查字体的名称以确保它与您系统中可用的字体相匹配。根据 Font Awesome 的文档,它应该是 font-family: "Font Awesome 5 Free"; 你的似乎有一个额外的反斜杠。

【讨论】:

  • 我创建了一个 CodeSandbox,它显示 css 样式非常少。任何样式表都不会请求 font-face。
【解决方案2】:

我认为在 styles.css 中有 FontAwesome !important 如下所示,它覆盖了 FontAwesome 5 Free 字体。您可以删除此样式以查看出现的字体。

fa, .fas, .far {
    font-family: FontAwesome !important;
}

【讨论】:

  • 我在 CodeSandbox 中尝试过,图标仍然呈现为框。
  • 我看到了沙盒 url,我认为 index.html 中缺少字体真棒样式链接。您可以将其添加回来并刷新页面codesandbox.io/s/mutable-rain-xk7ce
猜你喜欢
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2016-09-06
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
相关资源
最近更新 更多