解决CSS引用字体跨域问题,以及字体文件转base64
转字体文件为base64编码
解决方法一:将文字文件设置为 base64 编码。
字体转base64编码网址:https://transfonter.org/
具体方法:
1、选择字体(图标)ttf文件(一个文件就行)。
2、上传成功后,点击convert,下载文件。
3、这里以FontAwesome 为例。打开下载的文件包的 stylesheet.css文件
4、参考 font-awesome.css文件,将stylesheet.css中的内容,替换@font-face中的内容
// stylesheet.css 中内容
@font-face {
font-family: 'my-icon';
src: url(data:font/truetype;charset=utf-8;base64,xxxx...) format('truetype');
font-weight: normal;
font-style: normal;
}
替换原来的(参考例子)
@font-face{
font-family:my-icon;
src:url(../font/iconfont.eot?v=240);
src:url(../font/iconfont.eot?v=240#iefix) format('embedded-opentype'),
url(../font/iconfont.svg?v=240#iconfont) format('svg'),
url(../font/iconfont.woff?v=240) format('woff'),url(../font/iconfont.ttf?v=240) format('truetype')
}
5、最终结果如http://tool.wubin.work/font/FontAwesome-v.4.7.css 引用即可。
6、更多字体图标引用,请见http://tool.wubin.work/pages/fonts
Apache使用htaccess文件更改
Apache服务器解决方法(在conf、或者.htaccess 添加均可)
<FilesMatch "\.(ttf|otf|eot|woff|woff2)$">
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
</FilesMatch>
注意:LoadModule headers_module modules/mod_headers.so这个模块一定要存在且加载成功的
如果以上模块不加载,单纯的配置 Header 将会报错,亲测踩坑,网上查的很多资料,都没有提及这个模块。
// 单纯配置header
Header set Access-Control-Allow-Origin "*"
// 会报错:Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration
注意:线上操作一定要先备份原有的配置文件,修改完配置文件之后一定要将配置文件进行语法检查。
Nginx服务器解决办法
location ~* \.(eot|otf|ttf|woff|woff2)$ {
add_header Access-Control-Allow-Origin *;
}
当然,还是推荐第一种方法啦~