Rails 4アプリケーションがあり、カスタムフォントを使用しようとしています。
私はこれについて多くのチュートリアルを行ってきましたが、どういうわけか私のアプリケーションでは機能しません。
私はapplication.css.less
を使用しており、次の宣言があります。
@font-face {
font-family: 'HDVPeace';
src: font-url('HDV_Peace.eot');
src: font-url('HDV_Peace.eot?iefix') format('eot'),
font-url('HDV_Peace.woff') format('woff'),
font-url('HDV_Peace.ttf') format('truetype'),
font-url('HDV_Peace.svg#webfont') format('svg');
}
注:url()
の代わりにfont-url()
も使用しようとしました。前者はコンソールで404エラーを生成しますが、後者はまったく何もしないようです。リソースの下のchrome devツールでは、フォントファイルはassets
folder、またはどこでも表示されません
私のconfig/application.rb
には:
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
そして、私のconfig/environments/development.rb
とconfig/environments/production.rb
の両方に:
config.assets.paths << Rails.root.join('app', 'assets', 'fonts')
config.assets.precompile += %w( .svg .eot .woff .ttf)
フォントファイルはapp/assets/fonts
にあり、その下のフォルダーには含まれていません...
私は何が欠けていますか?
更新:
フォルダー構造
app
|----assets
|----fonts
|----HDV_Peace.eot
|----HDV_Peace.svg
|----HDV_Peace.ttf
|----HDV_Peace.woff
@font-face
宣言は非常に近く、url宣言内の/assets
プレフィックスが欠落しています。
@font-face {
font-family: 'HDVPeace';
src: url('/assets/HDV_Peace.eot');
src: url('/assets/HDV_Peace.eot?iefix') format('eot'),
url('/assets/HDV_Peace.woff') format('woff'),
url('/assets/HDV_Peace.ttf') format('truetype'),
url('/assets/HDV_Peace.svg#webfont') format('svg');
}
assets.paths
に追加されたものはすべて、開発と本番の両方で/assets
パスで直接利用できます。 application.rb
内のアセットパス変更行のみが必要です。development.rb
で再度行うと、production.rb
は冗長です。
さらに、すべてのフォント形式は本質的にバイナリです。それらをプリコンパイルする必要はないので、assets.precompile
オプションを安全に削除できます。
Rails 4には、フォントのパスを設定するヘルパーがあります。
/ assets/fontsまたはvendor/assets/fontsにフォントがある場合、Rails 4がそれらを見つけます!これを利用するには、Bootstrap CSSファイルで@font_face呼び出しを
@font-face {
font-family: 'Glyphicons Halflings';
src: font-url('glyphicons-halflings-regular.eot');
src: font-url('glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'),
font-url('glyphicons-halflings-regular.woff') format('woff'),
font-url('glyphicons-halflings-regular.ttf') format('truetype'),
font-url('glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');
}
フォントファイルの前にフォルダーの指定がないことに注意してください。これはRailsヘルパーによって完了します。
場所は動的であるため、フォントディレクトリをハードコーディングしないでくださいしないでください。
画像の組み込みヘルパーがあるように、フォントの組み込みヘルパーもあります: http://api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html#method-i-font_url
例:
@font-face {
font-family: 'QuicksandOTF';
src: font_url('Quicksand-Regular.otf') format('opentype');
font-weight: normal;
font-style: normal;
}
これはRails 4.1アプリで機能しました。
@font-face {
font-family: 'icomoon';
src: url(font-path('icomoon.eot') + "?#iefix") format('embedded-opentype'),
url(font-path('icomoon.woff')) format('woff'),
url(font-path('icomoon.ttf')) format('truetype'),
url(font-path('icomoon.svg') + "#icomoon") format('svg');
}
[class^="icon-"], [class*=" icon-"] {
font-family: 'icomoon';
speak: none;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
App/assets/fontsディレクトリを作成した後、「Railsサーバー」を再起動します
私はすべての問題を解決するためにこの記事を見つけました。
http://aokolish.me/blog/2011/12/24/at-font-face-with-the-asset-pipeline/
Rails 5でフォントの使用に問題がある場合は、app/assets/config/manifest.js
を編集するだけです
そして、この//= link_tree ../fonts
を挿入します
使い方:
@font-face { font-family: 'FontAwesome'; src: url('fontawesome-webfont.eot?v=4.6.3'); src: url('fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'), url('fontawesome-webfont.woff2?v=4.6.3') format('woff2'), url('fontawesome-webfont.woff?v=4.6.3') format('woff'), url('fontawesome-webfont.ttf?v=4.6.3') format('truetype'), url('fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; }
また、サーバーを再起動することを忘れないでください。
フォントがassets/fonts
ディレクトリから検出されない場合があります。
セキュリティが問題にならない場合は、fonts
ディレクトリをパブリックフォルダーに配置できます。その後、それらはpublic/
レベルで利用可能になります。
application.rbのRails 4の変更は忘れてください。 @ -Parker Selbertが言ったように/ assets /プレフィックスを追加するだけで、次のように動作します:
@font-face {
font-family: 'custom-font-name';
src: font-url('/assets/_folder_/fontX-webfont.eot');
src: font-url('/assets/_folder_/fontX-webfont.eot?#iefix') format('embedded-opentype'),
font-url('/assets/_folder_/fontX-webfont.woff') format('woff'),
font-url('/assets/_folder_/fontX-webfont.ttf') format('truetype'),
font-url('/assets/_folder_/fontX-webfont.svg#sociconregular') format('svg');
font-weight: normal;
font-style: normal;
}