Reputation: 519
Complete beginner to Laravel 5 and trying to import custom fonts using this code in my header:
<style>
@font-face {
font-family: 'Conv_OptimusPrinceps';
src: url('fonts/OptimusPrinceps.eot');
src: local('☺'), url('fonts/OptimusPrinceps.woff') format('woff'), url('fonts/OptimusPrinceps.ttf') format('truetype'), url('fonts/OptimusPrinceps.svg') format('svg');
font-weight: normal;
font-style: normal;
}
and calling it in my variables.scss. Currently my fonts are stored in my public directory:
public/fonts/OptimusPrinceps.woff
public/fonts/OptimusPrinceps.tff
etc.
For some reason this warning appears in my dev tools
Failed to decode downloaded font: http://localhost:3000/fonts/OptimusPrinceps.tff
OTS parsing error: invalid version tag
And my font doesn't load correctly.
Upvotes: 33
Views: 107166
Reputation: 111
In Laravel 5.4 in CSS, i had to add the /public
before the /fonts
folder for it to work. (for css included in a file)
`@font-face {
font-family: OptimusPrinceps;
src: url('/public/fonts/OptimusPrinceps.tff');
}`
An alternative which is the best way would be to use the assets()
helper function as below. The fonts folder should be in the public directory for this case. (for css in the head tag)
`<style>
@font-face {
font-family: OptimusPrinceps;
src: url('{{asset('/fonts/OptimusPrinceps.tff')}}');
}
</style>`
Upvotes: 8
Reputation: 2102
In webpack.mix.js
add
mix.copyDirectory('resources/assets/fonts', 'public/fonts');
Full doc here: https://laravel.com/docs/5.5/mix
Upvotes: 20
Reputation: 534
To add the public keyword when you including the custom font in laravel please add following:
supose font path is css/fonts/proxima-nova-light-59f99460e7b28.otf in public directory then use as
@font-face {
font-family: 'proxima-nova';
font-style: normal;
font-weight: 900;
src: url('../public/css/fonts/proxima-nova-light-59f99460e7b28.otf');
}
So you can use the ../public/+ font path in public directory. If you have any issue please tell me your font path I will update you path for that.
Upvotes: 3
Reputation: 3288
Place anything that the client browser should access into /public/
. You can use the Laravel helper function public_path
to build full URLs for it.
https://laravel.com/docs/5.2/helpers#method-public-path
For instance, if you put your font in /public/fonts/OptimusPrinceps.tff
(which you've done), you can access it one of two ways.
In Blade:
<style type="text/css">
@font-face {
font-family: OptimusPrinceps;
src: url('{{ public_path('fonts/OptimusPrinceps.tff') }}');
}
</style>
In CSS includes:
@font-face {
font-family: OptimusPrinceps;
src: url('/fonts/OptimusPrinceps.tff');
}
In the second example, you don't need any Laravel magic, really. Just reference the path absolutely so that it points to the correct directory.
Worth noting that this works with Bootstrap and SCSS. I usually put fonts in /public/static/fonts/
.
Upvotes: 41