我正在使用 create-react-app 并且不喜欢 eject
。
目前尚不清楚通过@font-face 导入并在本地加载的字体应该放在哪里。
即,我正在加载
@font-face {
font-family: 'Myriad Pro Regular';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Regular'), url('MYRIADPRO-REGULAR.woff') format('woff');
}
有什么建议么?
- 编辑
包括丹在他的回答中提到的要点
➜ Client git:(feature/trivia-game-ui-2) ✗ ls -l public/static/fonts
total 1168
-rwxr-xr-x@ 1 maximveksler staff 62676 Mar 17 2014 MYRIADPRO-BOLD.woff
-rwxr-xr-x@ 1 maximveksler staff 61500 Mar 17 2014 MYRIADPRO-BOLDCOND.woff
-rwxr-xr-x@ 1 maximveksler staff 66024 Mar 17 2014 MYRIADPRO-BOLDCONDIT.woff
-rwxr-xr-x@ 1 maximveksler staff 66108 Mar 17 2014 MYRIADPRO-BOLDIT.woff
-rwxr-xr-x@ 1 maximveksler staff 60044 Mar 17 2014 MYRIADPRO-COND.woff
-rwxr-xr-x@ 1 maximveksler staff 64656 Mar 17 2014 MYRIADPRO-CONDIT.woff
-rwxr-xr-x@ 1 maximveksler staff 61848 Mar 17 2014 MYRIADPRO-REGULAR.woff
-rwxr-xr-x@ 1 maximveksler staff 62448 Mar 17 2014 MYRIADPRO-SEMIBOLD.woff
-rwxr-xr-x@ 1 maximveksler staff 66232 Mar 17 2014 MYRIADPRO-SEMIBOLDIT.woff
➜ Client git:(feature/trivia-game-ui-2) ✗ cat src/containers/GameModule.css
.GameModule {
padding: 15px;
}
@font-face {
font-family: 'Myriad Pro Regular';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Regular'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-REGULAR.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Condensed';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Condensed'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-COND.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Semibold Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Semibold Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-SEMIBOLDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Semibold';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Semibold'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-SEMIBOLD.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Condensed Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Condensed Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-CONDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold Condensed Italic';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold Condensed Italic'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLDCONDIT.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold Condensed';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold Condensed'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLDCOND.woff') format('woff');
}
@font-face {
font-family: 'Myriad Pro Bold';
font-style: normal;
font-weight: normal;
src: local('Myriad Pro Bold'), url('%PUBLIC_URL%/static/fonts/MYRIADPRO-BOLD.woff') format('woff');
}
原文由 Maxim Veksler 发布,翻译遵循 CC BY-SA 4.0 许可协议
有两种选择:
使用导入
这是建议的选项。它确保您的字体通过构建管道,在编译期间获取哈希值,以便浏览器缓存正常工作,并且如果文件丢失,您会收到编译错误。
如 “添加图像、字体和文件” 中所述,您需要有一个从 JS 导入的 CSS 文件。例如,默认情况下
src/index.js
导入src/index.css
:像这样的 CSS 文件会通过构建管道,并且可以引用字体和图像。例如,如果您将字体放在
src/fonts/MyFont.woff
中,您的index.css
可能包括:请注意我们如何使用以
./
开头的相对路径。这是一个特殊的符号,可以帮助构建管道(由 Webpack 提供支持)发现这个文件。通常这应该足够了。
使用
public
文件夹如果由于某种原因您 不想 使用构建管道,而是使用“经典方式”,您可以 使用
public
文件夹 并将您的字体放在那里。这种方法的缺点是当您为生产编译时文件不会得到哈希值,因此您每次更改它们时都必须更新它们的名称,否则浏览器将缓存旧版本。
如果您想这样做,请将字体放入
public
文件夹的某个位置,例如放入public/fonts/MyFont.woff
。如果您采用这种方法,您应该将 CSS 文件也放入public
文件夹中,而 不是 从 JS 中导入它们,因为混合这些方法会非常混乱。所以,如果你仍然想这样做,你会有一个像public/index.css
这样的文件。您必须手动将<link>
从public/index.html
添加到此样式表:在其中,您将使用常规的 CSS 表示法:
注意我是如何使用
fonts/MyFont.woff
作为路径的。这是因为index.css
位于public
文件夹中,因此它将从公共路径提供(通常是服务器根目录,但如果您部署到 GitHub Pages 并设置您的homepage
字段到http://myuser.github.io/myproject
,它将从/myproject
提供服务。 Howeverfonts
are also in thepublic
folder, so they will be served fromfonts
relatively (eitherhttp://mywebsite.example/fonts
orhttp://myuser.github.io/myproject/fonts
)。因此我们使用相对路径。请注意,由于我们在此示例中避免了构建管道,因此它不会验证文件是否确实存在。这就是我不推荐这种方法的原因。另一个问题是我们的
index.css
文件没有被缩小并且没有得到哈希值。因此,最终用户的速度会变慢,并且您会冒着浏览器缓存文件旧版本的风险。使用哪种方式?
使用第一种方法(“使用导入”)。我只描述了第二个,因为那是你试图做的(从你的评论来看),但它有很多问题,只有在你解决某些问题时才应该是最后的手段。