如何在Chrome中控制变体选择器的字体回退行为
背景
我正在开发一款在Chrome上运行的应用,需使用大量日文字符字形,但无单款日文字体能覆盖全部所需字符。
已尝试方案
因此我尝试用两款及以上字体文件显示日文:优先使用IPAmj Mincho字体,IPAmj Mincho未实现的字形则用Harano Aji Mincho字体。
为此,我定义了两个font-face作为网页字体:
@font-face { font-family: "Harano Aji Mincho"; /* src: url(远程资源地址) format("opentype"); */ src: url(./HaranoAjiMincho-Regular.otf) format("opentype"); } @font-face { font-family: "IPAmj Mincho"; /* src: url(远程资源地址) format("truetype"); */ src: url(./ipamjm.ttf) format("truetype"); }
并为HTML标签添加style="font-family:'IPAmj Mincho','Harano Aji Mincho'"样式。
问题
当IPAmj Mincho含基础字符字形,但不含带变体选择器的该字符字形时,HTML中带变体选择器的字符不会回退到Harano Aji Mincho的对应字形,而是显示IPAmj Mincho的基础字符字形。
示例:
- IPAmj Mincho含
U+29D4B的字形(
),但不含带变体选择器U+E0101的Adobe-Japan1字符集对应字形(
,即U+29D4B, U+E0101)。 - Harano Aji Mincho同时含
U+29D4B和U+29D4B, U+E0101的字形。
此场景下,若标签指定style="font-family:'IPAmj Mincho','Harano Aji Mincho'",U+29D4B, U+E0101会显示IPAmj Mincho的U+29D4B字形,而非Harano Aji Mincho的对应变体字形。
问题咨询
是否有方法控制浏览器字体回退行为,使该场景下U+29D4B, U+E0101显示Harano Aji Mincho的对应字形?
补充说明
可为@font-face使用unicode-range属性,但存在问题:
- 仅能指定基础字符,Chrome 117.0.5938.149中指定变体选择器(如
U+E0101)会被忽略。 - 需指定字体所有码点范围,IPAmj Mincho含58843个汉字,Harano Aji Mincho含1372个变体字形,逐个指定不现实。
若为Harano Aji Mincho指定unicode-range: U+29D4B,则U+29D4B和U+29D4B, U+E0101均用该字体显示,而我希望前者用IPAmj Mincho,后者用Harano Aji Mincho。
内容的提问来源于stack exchange,提问作者SATO Yusuke

