【问题标题】:How to show different Italic and Oblique styles when the font provides them?字体提供时如何显示不同的斜体和斜体样式?
【发布时间】:2019-09-24 20:55:36
【问题描述】:

例如,Victor Mono 字体有很大不同(即设计合理)斜体和斜体样式,我将它用作我首选的编程字体,但我似乎无法让它正确显示两种样式同时在代码编辑器/文本处理器或网页上。

当我在本地系统上安装字体时,斜体和斜体都显示斜体变体,我认为这可能是操作系统字体系统的问题,所以我尝试像这样使用 CSS 嵌入字体

@font-face {
    font-family: 'Victor Mono';
    src: url('VictorMono-Regular.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'Victor Mono';
    src: url('VictorMono-Italic.ttf') format('truetype');
    font-weight: normal;
    font-style: italic;
}

@font-face {
    font-family: 'Victor Mono';
    src: url('VictorMono-Oblique.ttf') format('truetype');
    font-weight: normal;
    font-style: oblique;
}

但现在两者都

html {font-family:Victor Mono; font-weight:normal; font-style: italic;}

html {font-family:Victor Mono; font-weight:normal; font-style: oblique;}

显示倾斜样式。如果我重新排序@font-face 规则,将斜体放在斜体下面,就像这样

@font-face {
    font-family: 'Victor Mono';
    src: url('VictorMono-Regular.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;
}

@font-face {
    font-family: 'Victor Mono';
    src: url('VictorMono-Oblique.ttf') format('truetype');
    font-weight: normal;
    font-style: oblique;
}

@font-face {
    font-family: 'Victor Mono';
    src: url('VictorMono-Italic.ttf') format('truetype');
    font-weight: normal;
    font-style: italic;
}

斜体和斜体样式都将显示斜体变体。所以看起来 font-style: italic 和 font-style: oblique 实际上被渲染引擎解释为相同的规则,而后面出现的规则会覆盖前一个?

那么我应该如何显示不同的斜体和斜体字体样式?例如,我希望 VSCode 以斜体样式显示 cmets,而以斜体样式显示保留关键字。目前它一直为 cmets 和保留关键字显示斜体,当我查看代码时会伤害我的眼睛。

【问题讨论】:

    标签: css visual-studio-code fonts


    【解决方案1】:

    我认为它是因为相同的字体系列名称,试试这个:

    @font-face {
    font-family: 'Victor Mono Normal';
    src: url('VictorMono-Regular.ttf') format('truetype');
    font-weight: normal;
    font-style: normal;}
    @font-face {
    font-family: 'Victor Mono Oblique';
    src: url('VictorMono-Oblique.ttf') format('truetype');
    font-weight: normal;
    font-style: oblique;}
    @font-face {
    font-family: 'Victor Mono Italic';
    src: url('VictorMono-Italic.ttf') format('truetype');
    font-weight: normal;
    font-style: italic;}
    

    【讨论】:

    • 哦,好吧,我想将它们分成三个不同的字体系列可以解决问题,但这有点违背字体样式规则的目的?这是否意味着字体样式规则的当前实现存在严重错误,因此必须将 Italic 和 Oblique 视为两个不同的字体系列才能正常工作...
    • 如果您给出的名称与最后一个名称相同,则字体将由其字体系列名称调用,这就是为什么我们需要给出不同的名称。
    • errr,不,字体可以具有相同的字体系列名称,但字体粗细和字体样式不同,因此 VictorMono-Oblique.ttf 和 VictorMono-Italic.ttf 不会覆盖VictorMono-Regular.ttf 规则,实际上我可以为不同的权重定义相同的字体系列名称,如 VictorMono-Light.ttf 和 VictorMono-Medium.ttf,它们不会相互干扰,似乎只有“字体样式” : italic" 和 "font-style: oblique" 会互相干扰和覆盖。我只是不确定它是按照标准还是错误的实现。
    • 是的,将字体样式分成不同的字体系列可以按预期工作,这意味着我必须至少嵌入带有 CSS 的倾斜字体样式,我想这可能是字体系统本身的错误。
    【解决方案2】:

    The dist css in the Github repo only links the italic version - 当oblique 以这种方式被引用时,我已经看到了问题,所以这可能会导致问题。 The demo site's css 像 Fahim Khan 的回答提到的那样分别声明它们,所以如果你想单独引用它们,这可能是你必须做的。

    我不确定设计师是否打算让您能够像这样一起使用这三种样式,或者如何做到这一点 - 示例代码仅将普通和斜体一起使用。 IIRC,大多数编辑器都有单独的粗体字体设置,您可以将其设置为不同的字体 - 这可能是他们在编辑器中组合它们的方式,将其设置为斜体版本。

    【讨论】:

    • 我认为这与字体设计师的意图没有任何关系,对我来说,“font-style:italic”和“font-style:oblique”的实现似乎被破坏了,因为它们互相干扰和超越。尽管我不确定这是否是 CSS 标准的预期效果(即斜体和斜体规则应该相互覆盖)?
    • This talks a little bit more about oblique vs italic - 可能是您不能将@font-face 声明为倾斜的,因为渲染引擎通常采用普通字体并使其自身倾斜,或者它不是有意的以这种方式同时使用单独的斜体和斜体版本(它们通常不是),因为当该字体样式不存在时,会替换斜体。不过,我真的找不到任何支持这一点的标准/规范。
    • 好吧,根据我的观察,倾斜规则是有效的,但是它被简单地视为斜体,并将覆盖以前的斜体规则,反之亦然。因此,如果我先声明斜体字体,然后再为同一个字体系列声明斜体,“字体样式:斜体”和“字体样式:斜体”都将显示斜体版本。如果我在之前的斜体规则之后声明斜体字体,“字体样式:斜体”和“字体样式:斜体”都将显示斜体版本。对我来说似乎是一个错误。而且我认为有很多用例可以同时使用斜体和斜体字体...
    • 这是有道理的。你的 VSCode 配置是什么来分隔 cmets 和这样的反转词?
    猜你喜欢
    • 2010-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2011-07-18
    相关资源
    最近更新 更多