微信小程序:外部字体引用以及遇到的一些问题(字体图标/字体文件)

前言

设计稿中,有用到手机未内置的第三方字体。如何在微信小程序中使用呢?

开始

触类旁通,小程序的wxss语法与css是一致的。我们首先想到的是@font-face{}。没错,它就是今天的主角~

在正式开始之前,我们先来看看两个常见的概念:

字体文件:引用该类型文件,控制文字的显示形态。
字体图标:使用字体代替图标显示。

一开始,参照网上的方法,将对应的字体文件,上传到https://transfonter.org/,通过转换成base64编码,在wxss文件中使用。

(注意:@font-face{ src: url(不支持相对路径的引用); })

转换后的样式文件特别大,接近10M。完全不能接受的处理方式,于是开始使用绝对路径,将字体文件上传至服务器。(PS:其实一开始这种做法就是错误的,转base64适合字体图标(如:iconfont)的转换,文件相对较小。而我的需求是字体文件,不是字体图标。

实践

参考,参考,不会的时候看看别人类似的是怎么实现的。这里参考的是有赞Vant的cell组件。既然是开源的,那我们可以轻松查看它的实现。

cell组件.wxss的部分代码:

cell的wxss

虽然它使用的是字体图标,但是它的字体文件没有转换为base64编码,而是放在了服务器,通过url地址去请求的。这点和我的需求是一致的~

问题

既然如此,那么在自己的项目中,引入服务器中的字体就OK了呀~

wxml:

<view class="test">字体测试</view>
<view class="icon van-icon van-icon van-icon-upgrade van-icon-upgrade" style="font-size: 32rpx;"></view>

wxss:

@font-face {
    font-family:'youth';
    src:url('https://***/***/***/youth.TTF') format('truetype');
}
@font-face {
    font-family:'vant-icon';
    src:url('https://img.yzcdn.cn/vant/vant-icon-76f274.ttf') format('truetype');
}
.van-icon {
    position:relative;
    display:inline-block;
    font:normal normal normal 14px/1 vant-icon;
    font-size:inherit;
    text-rendering:auto;
}
.van-icon-upgrade::before {
    content:"\F058";
}
.test {
    font-size:50px;
    font-family:'youth';
}

先来看看看效果:

没有生效

 真机上预览字体并没有生效(微信开发工具上是正常的),下面一个小图标是我引用有赞字体的样式,它可以正常显示,说明有赞的字体在真机上是加载成功了的。

那我们单独在浏览器中请求一下这两个文件,看看有什么不同吧。

请求有赞的字体文件:

请求有赞的字体文件

请求我们的字体文件 :

请求自己的字体文件

 发现有什么不同没?在请求头Response Headers中,有赞的字体请求相应中有Access-Control-Allow-Origin。这是需要后端配置的,允许跨域请求。

沟通,沟通,修改之后,我们来看看真机上预览的效果:

正常显示的效果

总结

  1.  如果你是使用字体图标,文件较小,可以参考这篇文章将字体文件转为base64,以减少网络请求。

  2.  如果你是和我一样主要设置字体,字体文件一般较大,可以放置在服务器中,但是服务器一定要配置允许跨域。

  3. 如果你想了解更多情况,给你以下参考:
    https://developers.weixin.qq.com/community/develop/doc/000e40cce604582e9947f82615b800?highLine=%25E5%25A4%2596%25E9%2583%25A8%25E5%25AD%2597%25E4%25BD%2593
    https://www.cnblogs.com/llkbk/p/7410099.html
    https://blog.csdn.net/martinwangjun/article/details/79653728

最后,如果你还有什么疑问或想法,欢迎留言评论,或者扫描下方二维码,与我取得联系~  (记得备注:CSND喔~)

猜你喜欢

转载自blog.csdn.net/weixin_39015132/article/details/82657681