首页 文章

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

提问于
浏览
386

我正在看MDC page for the @font-face CSS rule,但我没有得到一件事 . 我有 bold ,italic和 bold + italic 的单独文件 . 如何在一个 @font-face 规则中嵌入所有三个文件?例如,如果我有:

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

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

6 回答

  • 1

    为了让字体变化正常工作,我不得不颠倒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");
    }
    
  • 48

    解决方案似乎是添加多个 @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;
    }
    

    顺便说一下,谷歌Chrome似乎不知道 format("ttf") 参数,所以你可能想跳过它 .

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

  • 8

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

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

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

    http://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,300italic,400italic,600italic
    

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

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

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

  • 8

    如今,二○一七年十二月一十七日 . 我在spec中没有找到任何关于字体属性顺序必要性的描述 . 而我在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');
    }
    
  • 655

    从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;
    }
    

    在大多数情况下,斜体可能是足够的,如果您注意定义您将使用哪个并坚持使用倾斜规则将是不必要的 .

  • 12
    /*
    # +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    # 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;
    }
    

相关问题