缺少图示符的CSS字体回退

缺少图示符的CSS字体回退,css,browser,fonts,Css,Browser,Fonts,CSS: “SFU GillSans”是一种越南语字体。根据,如果p包含的越南语字符不在GillSans字体中,则浏览器将在的“SFU GillSans”字体中查找该字符 如果默认字体缺少任何字符,是否可以完全切换到第二种字体,而不仅仅是某些字符?纯HTML/CSS:不,您不能这样做 但您可以做的是确定字符串中使用的字形,将其与字体中可用的字形进行比较,并使用CSS类有条件地为部分或整个页面设置不同的字体 可以使用JavaScript或任何服务器端语言动态确定字符串中使用的标志符号 更新:我在

CSS:

“SFU GillSans”
是一种越南语字体。根据,如果
p
包含的越南语字符不在
GillSans
字体中,则浏览器将在
的“SFU GillSans”
字体中查找该字符


如果默认字体缺少任何字符,是否可以完全切换到第二种字体,而不仅仅是某些字符?

纯HTML/CSS:不,您不能这样做

但您可以做的是确定字符串中使用的字形,将其与字体中可用的字形进行比较,并使用CSS类有条件地为部分或整个页面设置不同的字体

可以使用JavaScript或任何服务器端语言动态确定字符串中使用的标志符号


更新:我在下面特别为越南人添加了一个例子

越南语发音字符
containsVietnamese
的名称和内容可以轻松更改,以匹配回退字体或主字体中支持的字符范围。(白名单或黑名单方法)

//来自http://stackoverflow.com/a/26547315/451480:
越南语变音字符ẮẰẲẴẶĂẤẦẨẪẬÂÁÀÃẢẠĐẾỀỂỄỆÊÉÈẺẼẸÍÌỈĨỊỐỒỔỖỘÔỚỜỞỠỢƠÓÒÕỎỌỨỪỬỮỰƯÚÙỦŨỤÝỲỶỸỴ';
var段落=document.querySelectorAll('p');
对于(变量i=0,m=parations.length;i<1;i++){
if(包含第[i]段){
第[i]段。类名=‘越南语’;
}
}
函数包含IETNAMESE(段落){
var text=paragration.innerText | | paragration.textContent;
for(var i=0,m=text.length;i-1){
返回true;
}
}
}
p{
边框:1px实心#ddd;
字体系列:myregularfont,无衬线;
}
.越南人{
字体系列:myvietnamesefont,serif;
背景:绿色;
}
此段落应切换为衬线字体:bằng“水平,平坦”ng和huyền trắc“斜,尖”sắc、 hỏi、 ngã和nặng

中国人(汉语 / 漢語; 哈尼奥尔中文; Zhōngwén)是一组相关但在许多情况下相互无法理解的语言变体


英语是一种西日耳曼语,最早在中世纪早期的英格兰使用,现在是全球通用语言。

简短回答:不,CSS不能这么做

回退字体确实意味着回退,而不是“字体打开某些信号”。回退仅定义为“如果字形X不在字体A中,请尝试字体B(如果指定),然后是C,然后…直到找到通用字体系列,或者什么都没有,在这种情况下,请使用父元素的字体”


如果这就是SFU GillSans对所有文本(甚至只有一个越南语字符)所使用的字体,为什么不使用一种看起来不错的字体,并且支持拉丁a到拉丁D?例如,您可以只使用
SFU GillSans
作为主字体,而不是备用字体。CSS提示:您需要在这些名称周围加引号。需要引用带有特殊字符(如破折号或空格)的字体系列值。

您的想法是如何在JS中实现的?非常简单。这实际上是一个非常困难的问题,因为您需要脚本检测文本,这可能非常困难,因为单个Unicode块同时属于多个脚本。这就是为什么第一步要简单地找到一种包含所有所需字形的字体,并将其用作主字体。回退是指,字面上的回退:当您需要的字体有一个意外的间隙时。@user74158我添加了一个代码示例。您可能需要对其进行调整,以使其在项目中正常工作。如果您理解或调整它有任何困难,请告诉我。
p { 
font-family: Gill Sans, SFU GillSans;
}