如何将后备字体应用于所有文本,不仅是缺少的字符

时间:2018-09-21 10:44:21

标签: html css

是否可以将后备字体应用于整个段落?例如,我有一些文本可以是拉丁字母或西里尔字母或两个符号。我只想对拉丁文字使用一种字体,而对西里尔字母/混合字体使用另一种字体。有可能吗?

这里是一个例子:

p {
    font-family: Lato, Montserrat;
    font-size: 2rem;
}
<head>
    <link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
    <link href="https://fonts.googleapis.com/css?family=Montserrat" rel="stylesheet">
</head>
<body>
    <p>Some latin text.</p>
    <p>Здесь кирилица.</p>
    <p>And here some смешанный text.</p>
</body>

我想将蒙特拉特应用于整个第三段

1 个答案:

答案 0 :(得分:0)

好的,因此,如果您不惜一切代价避免字体闪烁,我建议在此进行服务器端处理-如果您想在服务器上节省一些性能,我将使用javascript进入客户端:

css:

.font-montserrat {
   font-family: Montserrat;
}

和带有jQuery的js(服务器端,您可以在渲染过程中对此进行调整,并放入一些php函数或使用的任何语言):

 $('p').each(function() {
    var p = $(this);

    // here it is important to avoid other inline tags like b, i, span, etc
    var textWithoutOtherTags = p.text();

    // this is the main bit and one would simply test by a regular expression 
    // - this can be adapted as needed, at the moment it returns true, if a
    // single latin or cyrilic letter is present
    var hasLatin = /[a-z]/gi.test(textWithoutOtherTags);
    var hasCyrilic = /[а-я]/gi.test(textWithoutOtherTags);

    // now add the class depending on the containing characters
    if (hasLatin && hasCyrilic) {
       p.addClass('font-montserrat');
    }
 });

您当然也可以在没有jQuery的情况下轻松地做到这一点,但是请注意,p内可能会出现b,i,strong,span和其他内联标签,并在进行正则表达式测试之前将其过滤掉。

好任务;)