Nick Sherman在本月初的 Ampersand 大会上发表了一场精彩的演讲,演讲内容基于他撰写的一篇文章,名为 用于响应式设计的可变字体。在演讲和文章中,他都提出我们需要一种新的字体格式来解决复杂的响应式设计问题。
…现代字体中的字形形状被限制为单个静态配置。任何字体粗细、宽度、笔画对比度等的变体——无论多么细微——都需要单独的字体文件。在印刷设计领域,布局也是静态的,因此这个概念可能看起来并不那么糟糕。然而,在网络上,这种限制就是我所说的响应式排版的“玻璃地板”:虽然边距、行间距和字体大小等更高级别的排版变量可以根据每个阅读者的查看环境动态调整,但这种灵活性对于在字体中定义的更低级变量消失了。每个字形都像一块漂浮在一片其他方面流动设计的冰块。
在排版设计界,以这种方式操作字符通常被称为插值:设计师选择多个极点,例如粗体或细体、紧缩或扩展字符,并让一个巧妙的算法在两者之间创建值。下面的示例来自 Andrew Johnson 的 SVG 插值实验,很好地解释了这个过程。

正如 Nick 提到的,使用我们目前用于网络的字体格式,从细体到粗体或从窄体到宽体字形的插值是不可能的。然而,他并不是唯一一位呼吁改进此处的设计师,正如 Andrew Johnson 也提出了类似的请求,希望有一种响应式字体格式。
…如今的网页字体将我们的响应式网站和应用程序绑定到无法缩放的僵硬字体上。结果,我们的用户获得了糟糕的阅读体验,并且由于额外的字体粗细而导致加载时间更长。
但是,为什么我们会在字体格式中需要这样的响应式功能呢?这将如何帮助我们解决设计问题?
可变字体格式的优势
这种新的格式将为设计师提供精细的排版控制,尤其是在常规粗细看起来太细而粗体看起来太粗的时候。相反,我们可以选择细体和粗体之间的值,字体将在两者之间进行插值——换句话说,设计师将能够大幅提高可读性。
此外,我们终于可以制作出单词或句子占据其父容器整个空间的布局,就像名为 Font to Width 的演示中一样。

这种技术听起来可能类似于 FitText 或 使用视口单位设置响应式文本,但排版设计师 Erik van Blokland 概述了一个明显的区别。
宽度变化将立即应用于将排版拟合到目标矩形。单词需要能够响应页面几何形状。
因此,为了最好地响应“页面几何形状”,我们需要对应用于设计的字体有更多控制权,每个字形的宽度与能够为font-size
设置响应式值一样重要。
实施新的可变字体格式的另一个原因可能是性能,因为我们只需要请求下载一个文件,而不是今天在使用需要包含超细体、细体、常规、中等、半粗体、粗体和黑色变体的大家族字体系统的时所需的多个字体。
响应式字体格式的想法并不新鲜,过去曾 多次尝试 创建非常类似的东西。Fontlab 产品总监 Adam Twardoch 在2013年呼吁复兴这些想法
在网络环境中,我认为至少其中一个可变字体模型值得复兴——因为它提供了巨大的压缩潜力,非常适合“响应式网络”范式,为网络上的文本布局提供了新的可能性,最重要的是,它在网络上的实现比在桌面平台上更容易。
Nick 继续总结了这些好处,如下所示
可变字体意味着更少的带宽、更少的服务器往返次数、更快的加载时间以及更强大的排版灵活性。这是一个全面的胜利。(这里仍然未经测试的变量是额外计算处理可能需要多长时间。)
但是,在向网络引入新的字体格式时,需要考虑很多技术因素,那么我们如何在设计中实现这些功能呢?
这种新格式如何在 CSS 中工作
在他的演讲中,Nick 建议了一个 CSS 中的实用示例,我在这里使用一个名为font-width
的虚拟属性对其进行了扩展,该属性允许我们设置字符的宽度,就像我们今天可以设置元素的font-weight
一样。
@font-face {
font-family: WebFont;
src: url('webfont.new') format('new format');
}
body {
font-family: WebFont;
font-weight: 450;
font-width: 200;
}
h1 {
font-weight: 600;
font-width: 999;
}
然后,我们可以将另一个元素的font-weight
设置为601
或411
或设计所需的任何值,文本将相应地做出响应。
现在,上面的示例肯定存在缺陷,但我认为它抓住了问题的核心,即我们的网站能够比目前更精细和细致。并且我可以想到很多示例,在这些示例中,这种新格式将创建更醒目和更漂亮的布局,更不用说它在 可缩放用户界面 中可能有多么有用。
WOFF 怎么样?
还有另一种字体格式 目前正在流行,称为 WOFF 2.0。它旨在大大改进其前身的压缩算法,并且对于需要由大量字形组成的字体的亚洲文字和其他语言来说将非常有用。但是,WOFF 2.0 仍然无法提供我们从可变字体格式中获得的设计变体,因为我们仍然需要多个字体来表示不同的宽度和粗细。
因此,我认为 WOFF 在短期内很棒,但它并没有真正帮助我们实现将这些字体格式真正变得响应式的长期目标。
潜在问题
尽管我从设计和开发方面讨论了这种新格式的优势,但它也存在问题。以下是我迄今为止发现的一些最紧迫的问题。
- 如果这种插值算法在客户端运行,那么可以说它可能会影响性能。
- 由于客户现在只需要一个字体文件,而不是今天需要的多个粗细和宽度,因此需要重新考虑网页字体的许可。
- 在这里充当一下反方:字体在用户设备上真的需要动态变化吗?
- 我与几位设计师谈过这个问题,他们提到,浏览器中半成品的提案比什么都没有更糟糕。
- 字体设计师需要弄清楚如何教育设计师,为什么这种新系统可能对他们的工作有所帮助,以及它对网络的整体益处是什么。我最近与一位字体设计师交谈,他提到他如何避免在字体中添加 OpenType 功能,例如小型大写字母和连字,因为许多平面设计师根本不知道或不在乎它们。
- 同样,字体设计师无法轻松地重新设计现有的字体以使用这些新的变量,因为他们必须从项目的开始就从头设计,才能使用这项技术。
总结
我认为,一种新的可变字体格式具有巨大的潜力,可以成为设计师工具箱中的关键部分。它也将大大改善网络普通用户的阅读体验。但这并不意味着我们可以忽视达成草案规范所必须克服的许多问题和障碍。
您怎么看?您会张开双臂欢迎可变字体文件吗?或者整个想法只是一个理想化的白日梦?我们很乐意在下面的评论中听到您的想法。
Knuth的MetaFONT重生?
我个人怀疑,从更复杂的字体格式中,我们会看到性能提升,为此我们不得不承受不使用的小型大写字母定义的损失等等,更不用说更通用的字体格式带来的安全隐患了。
唐纳德·克努斯1979年的程序Metafont基于类似的想法
鉴于近年来处理能力的进步,现在你可能可以直接将Metafont嵌入浏览器并完成它,甚至在移动设备上也是如此。
这听起来是个好主意!第一步是使用JavaScript为CSS属性提供polyfill,并使用SVG字体应用。
Adobe的多重主字体技术就是为此而开发的。https://en.wikipedia.org/wiki/Multiple_master_fonts
除了font-width,我们已经有了类似的东西:font-stretch
他们可以更改font-stretch的实现,允许使用数值。
https://mdn.org.cn/en/docs/Web/CSS/font-stretch
有趣的想法!我想问的是,让一些字体设计师对此发表意见。虽然这是一个有趣的技术解决方案,但字体设计师可能会对他们的字体在“中间”状态下的外观感到挑剔,并可能希望添加有关插值算法实现方式的额外功能。你给出的例子看起来很酷,但如果字体更复杂,可能会出现你意想不到的问题。
如果算法还考虑了外推法(例如,关于如果字体需要比最初设计的更宽,字体应该如何显示的猜测),字体设计师可能会像反对伪粗体和伪斜体(即倾斜)一样反对它。
不要误会我的意思——我并不是想在这里说消极的话。我只是认为,如果字体设计师参与其中,他们可以帮助解决这些以及可能出现的其他创意问题,这将是非常棒的。
我非常同意你的观点,这是一个非常好的观点,请一个专业的字体设计师来,看看他对这个的反应……我告诉你,他/她不会太高兴的。
这是一个有趣的想法,但我只看到经验丰富的设计师在使用它,他们终生都在玩弄字体和字体规则……而不是那些没有考虑字体的普通设计师……想象一下他们拥有这种自由……现在互联网速度越来越快,为什么还要费心加载2-3种字体呢……如果你是一位优秀的设计师/开发人员,你会确保用户能够使用你现有的工具获得良好的阅读体验……
我个人不需要这个……有机和流畅(像液体一样)之间存在细微差别……有机——适应……流畅——溢出……就这样。
带宽真的是问题吗?
是的。确实是。
看到一个页面没有任何文字(因为自定义字体加载时间过长)的烦躁感是巨大的。虽然这里的想法可能适用于响应式设计,但我们真正需要的是改变浏览器字体处理方式,以便如果页面在字体加载之前完全加载,则文本以本地字体呈现,以便用户可以阅读内容(毕竟这是整个目的)。
抱歉,假设带宽无限的人们毁了我们这些带宽有限的人的整个网络。
不怎么样?
从设计和排版角度来看,这绝对是一场噩梦。没有排版师会加入这个潮流。因为排版和易读性不是这样运作的。
不。拜托,不要……
字体设计师设计字体是为了让他设计的样子,而不是被拉伸……就像在标准音乐播放器上加一个音调/速度旋钮……
如果实施,我可以看到滥用它的可能性。
看着拉伸的文本让人感到疲惫,它降低了可读性,看起来很乱。
每次遇到不同的字体宽度时,强迫用户做出(诚然很小)的重新处理他们正在阅读的内容的心理努力,会对他们在您网站上的体验产生负面影响。
这似乎是一个可以让开发人员生活更轻松但用户生活更艰难的功能,我认为我们不应该朝这个方向发展。
最好是浏览器包含一个内置的通用多主类型字体,这样作者就可以指定精确的粗细、宽度、衬线程度、粗细笔画比率等,它会立即使用它,即使在下载具有相似度量但可能略微不同的字符的字体时也是如此。
你好,
我已在TypeDrawers上撰写了一份关于“响应式字体”基础实现现状的详尽的中期报告,该报告基于Apple设计和实现的TrueType GX Variations机制的扩展。
简而言之:Mac OS X、iOS以及(可能)Android和Linux系统已经或很快就会对其中最重要的部分提供基本支持,并且开发正在大力进行中!
澄清一下:WOFF2和WOFF与此无关。它们只是压缩技术,有点像GZIP,只是更复杂,并且针对字体结构量身定制。需要更改的是SFNT容器(及其处理方式)内部。SFNT是TrueType和OpenType或TTF和OTF的总称。如果SFNT像SVG,那么WOFF就像SVGZ。
Erik van Blokland的这些示例展示了如何通过SVG+JS polyfill实现响应式排版:无衬线标题、阿拉伯语、书法脚本、手写体。此代码是开源的。GX Variations字体将允许这种类型的行为(当然还有各种不太动画化、不太花哨的用例)原生化。
附注。查看这些示例时,请确保不断调整浏览器窗口的大小。
这个概念非常有趣!
将需要设计一个软件,允许字体设计师在将其打包到所述新格式之前,获取其母版并配置粗细和宽度的参数,以便进行更智能(或预期的)缩放。例如:当垂直轴上的笔画粗细比水平轴上的笔画粗细增长速度慢时。相关阅读:http://www.lucasfonts.com/about/interpolation-theory/
也就是说,我非常害怕在实践中看到它。我将用一个“能力越大,责任越大”的例子来解释我的担忧
印刷媒介使您可以通过水平或垂直拉伸矩形来不成比例地缩放字形。这种“功能”的存在已经被多次利用,不是因为字体灵活,而是因为程序允许它。
期待阅读更多关于此主题的内容!
我真的很喜欢你提供的链接,我同意你关于允许字体设计师设置规则的软件的观点。
此外,许多应用程序中的“转换”选项能够拉伸和变形字体,应该被移除或仅在将文字转换为形状时激活
讲解得很好,但我认为这不是一个好主意,因为排版师反复告诉我,排版不是这样运作的。我认为大多数排版师都不会同意你的观点。你不能拉伸字体。
字体大小是适应不同屏幕尺寸的足够参数。
关于页面上的“超细、细、常规、中粗、半粗、粗体和黑体”权重:无关紧要。有一些例外,但好的设计不会有那么多字体粗细。就像它不会有超过2或3种字体一样。
看起来像是过度设计,我完全同意这可能会在中间点“破坏”字体的设计。