如何为同一字体添加多个字体文件?

Fel*_*lix 424 css fonts css3 font-face

我正在查看@ font-face CSS规则MDC页面,但我没有得到一件事.我有单独的文件粗体,斜体粗体+斜体.如何将所有三个文件嵌入一个@font-face规则中?例如,如果我有:

@font-face {
    font-family: "DejaVu Sans";
    src: url("./fonts/DejaVuSans.ttf") format("ttf");
}
strong {
    font-family: "DejaVu Sans";
    font-weight: bold;
}
Run Code Online (Sandbox Code Playgroud)

浏览器将不知道哪个字体用于粗体(因为该文件是DejaVuSansBold.ttf),因此它将默认为我可能不想要的东西.如何告诉浏览器我对某种字体的所有不同变体?

Fel*_*lix 711

解决方案似乎是添加多个@font-face规则,例如:

@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans.ttf");
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Bold.ttf");
    font-weight: bold;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: italic, oblique;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic, oblique;
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,谷歌Chrome似乎不知道这个format("ttf")论点,所以你可能想跳过它.

(这个答案对于CSS 2规范是正确的.CSS3只允许一个字体样式而不是逗号分隔列表.)

  • 顺序很重要,粗体/斜体样式必须持久. (123认同)
  • 我在嵌入式浏览器Android 4.4上遇到了麻烦.结束改变`font-style:italic,oblique;`只是`font-style:italic;`似乎解决了所有问题. (10认同)
  • 值得注意的是,即使您使用EOT,这在IE8(及以下版本)中也不起作用.IE将下载备用字体,但它不会使用它,而是伪造粗体/斜体常规字体.此外,Chrome 11似乎无法呈现粗体和斜体字体 (8认同)
  • 此示例适用于具有用于粗体和斜体的单独TTF文件的字体.但是如果整个字体在一个.ttf文件中并且你想使用粗体怎么办呢,那该怎么办? (2认同)
  • [本文](https://www.fontspring.com/support/troubleshooting/style-linking)很好地解释了为什么这样做。关键摘录:“请注意,font-family属性对于所有四种字体都是相同的名称。而且,font-style和font-weight与字体是相同的。注意:正常粗细必须在列表的顶部!我们没有发现那之后的顺序很重要。” (2认同)

Jos*_*iah 54

从CSS3开始,规范发生了变化,只允许一个font-style.以逗号分隔的列表(根据CSS2)将被视为它normal并覆盖任何早期(默认)条目.这将使以这种方式定义的字体永久显示为斜体.

@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans.ttf");
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Bold.ttf");
    font-weight: bold;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: italic;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-Oblique.ttf");
    font-style: oblique;
}
@font-face {
    font-family: "DejaVu Sans";
    src: url("fonts/DejaVuSans-BoldOblique.ttf");
    font-weight: bold;
    font-style: oblique;
}
Run Code Online (Sandbox Code Playgroud)

在大多数情况下,斜体可能就足够了,如果你注意定义你将使用哪个并坚持下去,就不需要倾斜规则.

  • @NathanMerrill作为OP:"我有大胆,斜体和粗体+斜体的单独文件 - 所以有三个不同的文件.这个答案纠正了被接受的那个`font-style:italic,oblique;`不再有效,而且该答案使用了相同的文件斜体和斜体.值得指出的是,该文件在两种情况下共享. (3认同)

Ced*_*mon 15

为了让字体变化正常工作,我不得不颠倒CSS中@ font-face的顺序.

@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-BoldOblique.ttf");
    font-weight: bold;
    font-style: italic, oblique;
}   
@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-Oblique.ttf");
    font-style: italic, oblique;
}
@font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono-Bold.ttf");
    font-weight: bold;
}
 @font-face {
    font-family: "DejaVuMono";
    src: url("styles/DejaVuSansMono.ttf");
}
Run Code Online (Sandbox Code Playgroud)

  • *“颠倒顺序”*是什么意思? (2认同)

Die*_*itz 12

如果您使用的是Google字体,我建议如下.

如果您希望从本地主机或服务器运行字体,则需要下载文件.

不要在下载链接中下载ttf软件包,而是使用它们提供的实时链接,例如:

http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,300italic,400italic,600italic
Run Code Online (Sandbox Code Playgroud)

将URL粘贴到浏览器中,您应该获得类似于第一个答案的字体 - 面部声明.

打开提供的URL,下载并重命名文件.

将更新后的font-face声明与相对路径粘贴到CSS中的woff文件中,就完成了.


小智 10

如今,二○一七年十二月一十七日.我没有在规范中找到任何关于字体属性顺序的必要性的描述.而我在chrome中的测试始终无论订单如何都能正常工作.

@font-face {
  font-family: 'Font Awesome 5 Free';
  font-weight: 900;
  src: url('#{$fa-font-path}/fa-solid-900.eot');
  src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'),
  url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'),
  url('#{$fa-font-path}/fa-solid-900.woff') format('woff'),
  url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'),
  url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg');
}

@font-face {
  font-family: 'Font Awesome 5 Free';
  font-weight: 400;
  src: url('#{$fa-font-path}/fa-regular-400.eot');
  src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
  url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
  url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
  url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
  url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');
}
Run Code Online (Sandbox Code Playgroud)


Jer*_*y T 5

/*
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# dejavu sans
# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/
/*default version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans.ttf'); /* IE9 Compat Modes */
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'), /* Duplicated name with hyphen */
        url('dejavu/DejaVuSans.ttf') 
        format('truetype');
}
/*bold version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-Bold.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-Bold.ttf') 
        format('truetype');
    font-weight: bold;
}
/*italic version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-Oblique.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-Oblique.ttf') 
        format('truetype');
    font-style: italic;
}
/*bold italic version*/
@font-face {
    font-family: 'DejaVu Sans';
    src: url('dejavu/DejaVuSans-BoldOblique.ttf'); 
    src: 
        local('DejaVu Sans'),
        local('DejaVu-Sans'),
        url('dejavu/DejaVuSans-BoldOblique.ttf') 
        format('truetype');
    font-weight: bold;
    font-style: italic;
}
Run Code Online (Sandbox Code Playgroud)