仅指定常规时,浏览器如何生成粗体字体?

Posted

技术标签:

【中文标题】仅指定常规时,浏览器如何生成粗体字体?【英文标题】:How do browsers generate bold fonts when only regular is specified? 【发布时间】:2021-04-08 23:07:53 【问题描述】:

我在某个网站上使用Baloo 2 字体。我只加载了字体的“常规”(即 400)粗细变体,但在 Chrome 和 Firefox 上,使用 font-weight: bold(或 700)时看起来略有不同。

可以说,Chrome 版本的“粗体”字体看起来更好,但有趣的是,“Chrome 粗体”介于 500 到 600 之间,而“Firefox 粗体”仅比 400 略粗。

我很好奇这些“粗体”变体从何而来,以及如何在浏览器中获得一致的外观。


请检查以下示例:

@font-face 
  font-family: 'Baloo 2';
  font-style: normal;
  font-weight: 400;
  src: url(https://gstatic.loli.net/s/baloo2/v1/wXKrE3kTposypRyd51jcAA.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;


b 
  /* Not important, just to be absolutely sure */
  font-weight: bold !important;


.example 
  font-family: 'Baloo 2';
  font-style: normal;
<div class="example">
  <p>The quick brown fox jumps over the lazy dog.</p>
  <p><b>The quick brown fox jumps over the lazy dog.</b></p>
</div>

【问题讨论】:

我不确定你的问题是什么。 b 元素告诉它它是粗体的。在调试工具中,chrome 说 a b 元素的重量为 700。 @LarryBud 没有通过@font-face 指定粗体字体,但文本看起来是粗体。 “字体的粗体变体”不知从何而来。 这不是凭空出现的,您将第二句话包裹在 元素中。浏览器不需要特定的粗体字体来加粗。 @LarryBud 要使文本看起来更粗体,除了指定font-weight 之外,还需要字体 的“粗体变体”。这不是关于font-weight 项目的问题,而是显示的字体(字形集)。您能否支持您的说法,即浏览器不需要特定的粗体字 大量关于“人造粗体”主题的文章:google.com/… 【参考方案1】:

见this article 但基本上,你需要两件事。将 h 标签设置为全部使用特定的字体粗细,将字体粗细设置为 -100。

如果你愿意,你可以使用一个类来加粗

@font-face 
  font-family: 'Baloo 2';
  font-style: normal;
  font-weight: 400;
  src: url(https://gstatic.loli.net/s/baloo2/v1/wXKrE3kTposypRyd51jcAA.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;


b  // insure adding bold won't jack you up!
  font-family: 'Baloo 2';
  font-weight: 200 !important;


.bold 
  font-family: 'Baloo 2';
  font-weight: 700 !important;


h1, h2, h3, h4, h5 
   font-family: 'Baloo 2';
   font-weight: 400; /* Be specific */


.example 
  font-family: 'Baloo 2';
  font-style: normal;
<div class="example">
  <p>The quick brown fox jumps over the lazy dog.  <- P tag</p>
  <p><b>The quick brown fox jumps over the lazy dog.<- Bold</b></p>
  <h4>The quick brown fox jumps over the lazy dog. <- H4</h4>
  <h4><b>The quick brown fox jumps over the lazy dog. <- H4 Bold</b></h4>
</div>
 <p class="bold">The quick brown fox jumps over the lazy dog.  <- Class bold</p>

【讨论】:

以上是关于仅指定常规时,浏览器如何生成粗体字体?的主要内容,如果未能解决你的问题,请参考以下文章

如何从字体面板(NSFontPanel)和颜色中仅检索字体样式(粗体,斜体,粗斜体)?

微软雅黑字体显示不正常

用 PIL 绘制粗体/斜体文本?

在 Windows 字体显示斜体,但 linux 它总是显示粗体

当引号中的文本然后文本应该是粗体否则在水晶报表中的常规字体

UIFont - 如何获取系统细字体