[解決済み] create-react-appベースのプロジェクトにフォントを追加する方法は?
質問
を使っています。
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');
}
何かご意見はありますか?
-- EDIT
Danが回答で言及した要点を含む
➜ 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');
}
解決方法は?
2つの選択肢があります。
インポートを使用する
これは推奨されるオプションです。これにより、フォントがビルドパイプラインを通過し、コンパイル時にハッシュを取得してブラウザのキャッシュが正しく機能するようになり、ファイルが見つからない場合はコンパイルエラーが発生するようになります。
として
画像、フォント、ファイルの追加" で説明しています。
の場合、JSからCSSファイルをインポートしてもらう必要があります。例えば、デフォルトでは
src/index.js
インポート
src/index.css
:
import './index.css';
このようなCSSファイルはビルドパイプラインを通過し、フォントや画像を参照することができます。たとえば、あるフォントを
src/fonts/MyFont.woff
の場合、あなたの
index.css
には、こんなものがあるかもしれません。
@font-face {
font-family: 'MyFont';
src: local('MyFont'), url(./fonts/MyFont.woff) format('woff');
/* other formats include: 'woff2', 'truetype, 'opentype',
'embedded-opentype', and 'svg' */
}
で始まる相対パスを使っていることに注目してください。
./
. これは、ビルドパイプライン(Webpackによる)がこのファイルを発見しやすくするための特別な記法です。
通常はこれで十分なはずです。
使用方法
public
フォルダ
もし、何らかの理由で
ではなく
ビルドパイプラインを使用する代わりに、"古典的な方法 "で行うことができます。
を使用します。
public
フォルダ
を作成し、そこにフォントを置いてください。
この方法の欠点は、製品用にコンパイルするときにファイルのハッシュを取得しないため、ファイルを変更するたびに名前を更新する必要があることです。
この方法でやりたい場合は、フォントをどこか
public
フォルダの中に、例えば
public/fonts/MyFont.woff
. この方法に従えば、CSS ファイルは
public
フォルダーを作成し
ではなく
JSからインポートするのは、これらのアプローチが混在すると非常に混乱するからです。それで、それでもやるなら、次のようなファイルを用意することになります。
public/index.css
. を手動で追加する必要があります。
<link>
からこのスタイルシートに
public/index.html
:
<link rel="stylesheet" href="%PUBLIC_URL%/index.css">
そしてその内部では、通常のCSS表記を使用することになります。
@font-face {
font-family: 'MyFont';
src: local('MyFont'), url(fonts/MyFont.woff) format('woff');
}
を使っていることに注目してください。
fonts/MyFont.woff
をパスとして指定します。これは
index.css
は
public
フォルダに格納されているので、公開パス (通常はサーバールートだが、GitHub Pages にデプロイして
homepage
フィールドを
http://myuser.github.io/myproject
から提供されます。
/myproject
). しかし
fonts
はまた
public
フォルダから提供されます。
fonts
のどちらか)。
http://mywebsite.com/fonts
または
http://myuser.github.io/myproject/fonts
). したがって、相対パスを使用します。
この例では、ビルドパイプラインを避けているので、ファイルが実際に存在するかどうかは検証されないことに注意してください。このため、この方法はあまりお勧めできません。もうひとつの問題は
index.css
ファイルはminifyされず、ハッシュも取得されない。だから、エンドユーザーにとっては遅くなるし、ブラウザが古いバージョンのファイルをキャッシュしてしまうリスクもある。
どの方法を使用するか?
最初の方法(「Importsを使用する」)を行ってください。2番目の方法は、あなたがやろうとしていたことなので(あなたのコメントから判断して)、説明しただけですが、多くの問題があり、何らかの問題を回避するための最後の手段であるべきです。
関連
-
[解決済み】サイドバーの位置を変更する
-
[解決済み] ユーザーエージェントのスタイルシートが私のCSSを上書きしないようにする方法
-
[解決済み] CSSやSVGで半円を描く
-
[解決済み] ボーダーの太さをパーセントで設定するには?
-
[解決済み] DjangoのCSSが更新されない
-
[解決済み] 特定のdivを右へ移動させたい
-
[解決済み] 子 div が親 div からはみ出さないようにする。
-
[解決済み] Reactコンポーネントに条件付きで属性を追加するにはどうすればよいですか?
-
[解決済み] create-react-appベースのプロジェクトを実行するためのポートを指定する方法は?
-
[解決済み】create-react-appでテンプレートが提供されない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】なぜ私のdivは重なっているのですか?
-
[解決済み] margin: auto は中央揃えではありません。
-
[解決済み] Chrome で注入されたスタイルシートによる奇妙なスタイリングが発生する
-
[解決済み] svgの円のダブルストロークの色
-
[解決済み] モバイル端末でCSSを使用したフルハイトの背景画像
-
[解決済み] 要素を移動せずにホバー時にCSSボーダーを追加する [複製]
-
[解決済み] 幅・高さをピクセル単位からパーセント単位で設定する。
-
[解決済み] HTMLとCSSのBackground-imageが表示されない
-
[解決済み] ブルマのテーブルをレスポンシブにするにはどうしたらいいですか?
-
[解決済み] 同じフォントに対して複数のフォントファイルを追加する方法を教えてください。