对于经常接触字体的前端开发者来说,引入字体可能是一个“技术活”——不同的字宽、字重以及样式的字体都有可能需要我们单独引入。

以MacOS系统内置的“苹方”字体为例,自带“极细(Ultra Light)”、“纤细(Thin)”、“细(Light)”、“常规(Regular)”、“中黑(Medium)”、“中粗(Semibold)”六种字重,占用体积80M。对于这样的系统字体而言,我们使用时并无需引入,只需设置字体集即可,无需考虑字体引入的速度问题。

引入非系统自带字体时,我们可以通过压缩字体减少体积后引入,不过压缩只会减少字体支持的字符集,对不同字重、字宽等有需求时,依然需要引入相应的字体。

上图截取自 https://www.foundertype.com/

可变形字体

为了应对这些问题,Adobe、Microsoft、Apple、Google联合推出OpenType1.8版本,加入了Variable Fonts(可变形字体)。

可变形字体看起来像是不同字重、字宽或不同样式的字体的合集,然而,可变形字体通过轴(Axis)来描述字体轮廓点如何变化,以达到不同的字重、字宽或样式的变化,因此仅使用一套轮廓点的可变形字体体积比普通字体集会小。

可变形字体的秘密 - 变形轴

可变形字体通过变形轴(variation axis)来描述如何渲染展示字体,可以在css中通过font-variation-settings属性来修改:

1. wght - 字重(font weight),用于定义笔画的粗细,可变范围1-999,对应font-weight属性。在使用非可变形字体时,我们只能使用100-900并以100步长递增或者normal、bold这样的别名来定义字重。在使用可变形字体时,我们可以用粒度更小的方式修改字重。

.font-weight-normal {  font-weight: 400;  font-variation-settings: 'wght' 400;}

2. wdth - 字宽(font width),用于定义字形的宽窄,对应font-stretch属性。

.font-stretch-115 {  font-stretch: 115%;  font-variation-settings: 'wdth' 115; /*设置时不需写上百分比符号。*/}

3. ital - 斜体(italic),用于设置字形展示为正体或斜体,对应font-style: italic。斜体的变化没有中间值,只有正体和斜体的变化。

.font-italic {  font-style: italic;  font-variation-settings: 'ital' 1;}

4. slnt - 倾斜(slant),与ital不一样的是,slnt可以设置字形倾斜的中间值,还可以根据设计设定顺时针或逆时针的倾斜。

.font-slant-30 {  font-style: oblique 30deg;  font-variation-settings: 'slnt' 30; /*此处也不需设置单位*/}

5. opsz视觉尺寸(optical size),与字重的变化不同,视觉尺寸的变化更注重不同字号下字体笔画的变化,保证在不同尺寸下的可能性。

以上五种变形轴又成为保留轴(registered axis),同时字体设计师可以根据需要创建自定义轴(axis),详情可见 https://docs.microsoft.com/zh-cn/typography/opentype/spec/dvaraxisreg

如何使用

已有部分系统字体变成可变字体,不过第三方字体仍需我们引入后才可使用。我们依旧使用@font-face引入:

@font-face {  font-family: 'source sans';  src: url(SourceSansVariable.woff2) format("woff2-variations"),       url(SourceSans.woff2) format("woff2”);  font-weight: normal;  font-style: normal;}

前面的字体src表示可变形字体,后面表示普通字体,方便兼容旧的浏览器。

/*支持的浏览器*/h1 {  font-family: "source sans";  font-variation-settings: "wght" 300, "wdth" 120;}/*不支持的浏览器*/h1 {  font-family: 'source sans';  font-weight: 300;  font-stretch: 120%;}

上面的两种写法,在支持可变形字体的浏览器上的效果是等同的。我们可以通过CSS Media Query,在支持可变形字体的浏览器上,增强展示效果。

@supports (font-variation-settings: normal) {  /* TODO */}

应用

自可变形字体发布以来,操作系统、浏览器、排版软件、设计师、字体厂商都在积极跟进。

MacOS 10.13+和Windows 10都已经系统性支持可变字体。

从caniuse.com数据可以看到,目前主流浏览器均已支持:

在中文字体方面,方正、文鼎都已推出可变形字体,可根据需要使用。不过相较于中文字体的复杂,英文可变字体相对就丰富多了。https://www.axis-praxis.org/ 和 https://v-fonts.com/ 都提供了可变字体的预览。

动画

得益于多种变形轴的加入,在设置文字动画时,不再局限于文字的加粗、字号变化等常规操作,现在可以根据设计师的需求,进行文字笔画的变形、圆角等操作。更骚的是,有设计师做出了图形可变字体,再结合动画,可以玩出更多的花样。

(来自zycon字体)

自适应

页面在前面也介绍过,可以通过视觉尺寸来控制笔画的变化,当然,在不同尺寸的设备上,通过设置不同字重、字宽也可以达到增强可读性的目的。

@media screen and (max-width: 699px) and (min-width: 460px)h1 {  font-size: 2.5rem;  font-variation-settings: "wght" 500, "wdth" 100;}

@media screen and (min-width: 800px)h1 {  font-variation-settings: "wght" 300, "wdth" 120;  font-size: 3rem;}

展望

字体文件体积大、引入文件数量多是目前我们关注到的制约字体在web应用上的一个痛点,在即将到来的5G时代可能并不是一个需要关注的小问题。不过可变形字体确实能够解决排版问题、提升交互,在不久将来,更注重视觉可读性的网站、APP相信将会越来越多。撒花。

参考文档

  1. https://css-tricks.com/one-file-many-options-using-variable-fonts-web/

  2. https://css-tricks.com/weird-things-variable-fonts-can-do/

  3. https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts/

  4. https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide

前端怎么加粗字体_Variable Fonts 可变形字体相关推荐

  1. 前端怎么加粗字体_【好程序员独家】100道前端面试题(精选版 含答案)

    为了方便各位热爱前端的小伙伴能够更加便捷的学习到前端,好程序员特意为大家整理100道独家HTML5大前端面试题!希望能给你带来帮助! 一.Doctype的作用?严格模式和混杂模式的区分,以及如何触发这 ...

  2. 前端怎么加粗字体_泣血总结,死磕前端知识点

    Author:小闫同学 wechat:Pythonnote 这么久没有发⽂,很多⼈关⼼我是否离开了这个美丽的世界 ... 这些同学,是如何居⼼?出来,我保证不打死你们.不过很久没有更新⽂章,确实抱歉, ...

  3. pythontkinter字体加粗代码_Tkinter Fonts(字体)(示例代码)

    简单的tuple字体: 作为一个tuple的第一个元素是字体家族,一个点的大小,可选择一个字符串,包含一个或更多的粗体,斜体,下划线的样式修饰符,加粗. 例子: ("Helvetica&qu ...

  4. 前端怎么加粗字体_【推荐】皮卡丘怎么画?教你如何轻松绘画出可爱的宠物小精灵!...

    ​​皮卡丘怎么画?宠物小精灵怎么画?宠物动物怎么画?学习绘画难吗?怎样才能学好绘画?想必这些都是绘画初学者们经常在想的问题吧,想要绘画皮卡丘但是却不知道怎么画才好,想要绘画其他宠物小精灵也不知道怎么画 ...

  5. 前端怎么加粗字体_安卓平板要怎么像ipad一样自由制作电子手帐

    相信很多人都有看到过ipad党制作的电子手帐十分好看,那么只有安卓系统的我们要如何像他们一样自由制作手帐呢?看完这篇文章保证大家会爱上这个软件. 今日作者  青青青桔柠檬 手帐之家  原创 最近柠檬又 ...

  6. 前端怎么加粗字体_原来CAD的线条还可以这样加粗!还能修改初始单位!太实用了...

    阅读本文前,请您先点击上面的"蓝色字体",再点击"关注",这样您就可以继续免费收到文章了.如果喜欢就关注订阅吧!也不要忘记点赞哦~亲,看的开心可以点个好看 . ...

  7. 前端怎么加粗字体_视频加文字怎么弄?强烈建议你花几分钟学一下

    视频加文字怎么弄?在日常生活中,有些朋友是有拍摄小视频的习惯的,但拍好的视频他们往往不知道怎么编辑才能更好看,比如添加文字.制作特效等,下面我来给新手们介绍一款迅捷视频剪辑软件,用它添加文字是很方便的 ...

  8. php如何把文字加粗,HTML中如何将字体加粗

    在HTML中要将字体加粗我们有两种方法,一种是利用b标签:另一种是利用strong标签,本篇文章我们就来介绍一下HTML中b标签和strong标签的用法. b标签和strong标签虽然都是可以让字体加 ...

  9. php导出excel字体加粗,phpexcel 导出格式,字体调整

    对于小数量数据(低于1000)条,如果出现导出较慢,或者网页超时,那可能是phpexcel样式文件写错地方了,可能和数据混在一起,导致较慢. 如果数据太多导致超时或者内存溢出,可添加 set_time ...

  10. android 字体选中加粗,Android——TabLayout设置选中字体变大,加粗,透明度

    TabLayout自带没有设置选中时字体大小的属性,网上搜了好多基本都不生效,搞了一上午终于好使了,记个笔记记录下,布局要自己定义下,要不不好使. 布局中使用TabLayout的xml文件 andro ...

最新文章

  1. speech-transforms 之语音识别
  2. IE6 CSS的一个bug
  3. 2009'中国GIS优秀工程公示
  4. MIT算法导论(一)——算法分析和引论
  5. 使用PWM实现语音播放
  6. ASP.NET MVC中的统一化自定义异常处理
  7. python和anaconda区别_Pycharm、Anaconda到底是什么?有什么区别?
  8. 一个基于 EasyUI 的前台架构(4)主体页面框架收工
  9. 移动数据通信网络工作原理(SGSNGGSN)
  10. Android 安卓动画 补间动画 - 平移动画
  11. (亲测有效)解决keil5编译出现的L6002U问题
  12. 庸人自谈爬虫二三事——兴之所至,心之所安,尽其在我
  13. 滴滴D1上路之后,科技巨头正在“抢滩登陆“造车战场
  14. Keil5使用AC6编译器
  15. 经典例题C语言程序解决数学问题
  16. 2012计算机科学排名,USNEWS2012年计算机科学专业研究生排名
  17. 赠书 | 四大通证类型:价值创新的源头
  18. canvas绘图工具
  19. 失掉京东流量入口,易鑫汽车平台交易业务再萎缩
  20. tp5框架配置多个Cache

热门文章

  1. rails中引入god
  2. windows写注册表文件脚本的编写
  3. 桌面扫码点餐系统(小程序+Java后台)
  4. 微信小程序-扫码点餐系统设计
  5. PHP 计算当前时间是这一年的第几周
  6. MATLAB求解一阶RC电路和二阶RLC电路
  7. wx.previewImage图片加载不出来
  8. 关于技术人员创业入股的问题
  9. uniapp中app、h5、小程序引入高德地图定位,并封装起来调用。
  10. 2021新上传QQ透明头像成品+源码