如何在JavaFX中嵌入字体变体

6

我需要在一个JavaFX项目中嵌入本地的.ttf文件,其中还有一些变体(粗体、斜体等),但是css解析器似乎不支持@font-face声明中的字体属性:

@font-face {
    font-family: 'Open Sans', sans-serif;
    src: url('fonts/OpenSans-Regular.ttf');
}
@font-face {
    font-family: 'Open Sans', sans-serif;
    src: url('fonts/OpenSans-Bold.ttf');
    font-weight: bold;
}
@font-face {
    font-family: 'Open Sans', sans-serif;
    src: url('fonts/OpenSans-ExtraBoldItalic.ttf');
    font-style: italic;
}

警告:CSS错误解析 jar:file:/home/test/dist/run736633436/test.jar!/it/test/vending/css/application.css: 在[8,15]处出现意外的TOKEN [:] mag 06,2015 3:40:15 PM com.sun.javafx.css.parser.CSSParser fontFace WARNING: CSS错误解析 jar:file:/home/test/dist/run736633436/test.jar!/it/test/vending/css/application.css: 在[13,14]处出现意外的TOKEN [:]

我该如何实现这个?

==编辑==


请注意,解析器会抱怨font-weight: bold;font-style: italic;规则。


font-family 应该使用你想在所有 CSS 文件中使用的字体名称。你要使用的字体应该有唯一的名称,如 OpenSansRegularOpenSansBoldOpenSansBoldItalic。虽然我不确定这是否完全是问题所在,因为你的 CSS 错误没有提供太多信息,但值得一试。 - ItachiUchiha
@ItachiUchiha 不,定义不同的字体族也无济于事:解析器仍然会抱怨 font-weight: bold; 和 **font-style: italic;**。使用多个相同字体族但具有不同字体属性实际上是正确的;请参见 w3schools - 至少在谈论 css3 方面是如此。 - Azathoth
1个回答

4

我想我找到了一个解决方案。尝试用 src 属性替换 font-weightfont-style 属性。在你的情况下,你的css应该是这样的:

@font-face {
    font-family: 'Open Sans', sans-serif;
    src: url('fonts/OpenSans-Regular.ttf');
}
@font-face {
    font-family: 'Open Sans', sans-serif;
    font-weight: bold;
    src: url('fonts/OpenSans-Bold.ttf');
}
@font-face {
    font-family: 'Open Sans', sans-serif;
    font-style: italic;
    src: url('fonts/OpenSans-ExtraBoldItalic.ttf');
}

我曾经遇到过同样的问题,交换属性后问题得到了解决。我不知道为什么会这样,但它似乎解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接