font-feature-settings用于精准启用或禁用OpenType字体中已内置的特定字形特性,如连字("liga" 1)、小型大写字母("smcp" 1)、表格数字("tnum" 1)等,不改变字重、斜体或生成不存在的字形。

font-feature-settings 不是用来“做字体特性设置”的通用开关,它只负责打开或关闭 OpenType 字体里已内置的特定字形行为——比如连字、小型大写字母、表格数字等。它不改变字重、不生成斜体、也不让普通字体“变瘦”或“变粗”。想用连字?得先确认字体本身带 liga 特性,且你加载的是含该特性的字体文件。
怎么写 font-feature-settings 才合法
语法必须是字符串 + 数值,引号不能少,数值只能是 1 或 0(on/off 是别名,但部分浏览器解析不稳定,建议统一用数字):
-
font-feature-settings: "liga" 1;✅ 合法,启用标准连字 -
font-feature-settings: "liga" on;⚠️ 虽然多数浏览器认,但 MDN 明确标注为非标准写法,Safari 某些版本会静默失败 -
font-feature-settings: liga 1;❌ 缺少引号,整个声明无效 -
font-feature-settings: "liga" true;❌ 布尔值不被接受,只认1/0
为什么加了 "liga" 1 却没连字效果
最常见原因不是 CSS 写错了,而是字体本身不支持或没加载对:
- Google Fonts 默认引入的 Roboto、Open Sans 等大多**不含
liga特性**(除非你手动选了 “Roboto with ligatures” 这类特殊变体) - 用
@font-face加载时,WOFF 文件可能被精简过,而 WOFF2 更大概率保留 OpenType 特性;检查你src里的format("woff2")是否指向完整版 - Chrome DevTools → Elements → Computed 面板里搜
font-feature-settings,如果值被划掉(strikethrough),说明语法错误或字体不支持该标签 - 某些字体把连字逻辑放在
calt(上下文替代)里,而非liga,得试"calt" 1
连字之外,哪些 OpenType 特性真正常用且靠谱
别盲目堆标签,优先验证字体是否真有对应字形:
-
"tnum" 1:表格数字(tabular figures),数字等宽,适合金额、表格对齐,Noto Sans、IBM Plex、Source Code Pro 都支持 -
"smcp" 1:小型大写字母,需字体内置smcp字形集,否则静默忽略;"c2sc"可配合使用,把小写字母也转成小型大写 -
"ss01"–"ss20":样式集,编号由字体设计师定义,查不到文档就靠试;例如 IBM Plex Sans 支持ss05(更紧凑的标点),但 Roboto 完全不支持任何ssXX -
"frac" 1:自动分数,输入1/2会渲染成 ½,前提是字体含分数字形(如 Noto Serif、Merriweather)
真正容易被忽略的是:所有这些特性都依赖字体文件本身的 OpenType 表数据。你不能靠 CSS “变出”一个字体没有的连字,也不能靠 font-feature-settings 把 Regular 字体变成 Bold Italic——那得靠 font-weight 和 font-style 匹配已加载的对应字重/倾斜文件,或者换用可变字体 + font-variation-settings。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











