【问题标题】:Why is Spartan font not centered vertically?为什么 Spartan 字体不垂直居中?
【发布时间】:2021-02-03 02:06:34
【问题描述】:

我想弄清楚为什么我的字体没有垂直对齐。我使用的是 Google 提供的 Spartan MB 字体,但它看起来不太对劲,see here。

我的 HTML 标记是这样的:

<html>
  <head>
    <link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Spartan&display=swap" rel="stylesheet">
    <style>
      button, input {
  font-family: 'Spartan', sans-serif;

      }
    </style>
  </head>
  <body>
    <button>Click me</button>
    <input type="text" value="Hello world" />
  </body>
</html>

为什么使用常规 Arial 字体没有任何问题?

我尝试过的方法

  1. 设置不同的line-heigh 属性。没有帮助。
  2. 设置vertical-align: text-bottom 没有帮助。
  3. 使用ftxdumperfuser 实用程序修改字体本身,如here 所述,通过更改上行和下行属性。这有点帮助,但只适用于 Chromium 浏览器。

有人可以告诉我这种行为吗?有没有跨浏览器的方法来解决这个问题?

【问题讨论】:

  • 如果您还使用低于基线的字母(如 y、p、g 等),您会发现它正在填充高度,因此居中。对齐方式不会根据使用的字母而改变,因此它必须同时适用于所有字母。
  • @Johannes 这很有趣,我认为从技术上讲,它只需要适合字体。但对我来说,从审美的角度来看,这似乎有些过时,你不是说吗?所以我想这取决于人类来弥补这一点。如果字体可以设置它们的“中心”并且浏览器可以以某种方式接收它,那就太好了。
  • 好吧,但是“他们的中心”在您的示例“点击我”和例如“输入一些东西”之间会有所不同 - y 和 g 有下降,“点击这里”没有因此看起来更偏离中心。那么“字体的中心”在哪里:两个示例的不同之处?如果是,则需要(自动)根据文本内容进行不同的处理...

标签: html css fonts


【解决方案1】:

问题在于字体本身,如何呈现。您只能使用顶部/底部的不同填充。

  button, input {
  font-family: 'Spartan', sans-serif;
  }
  
 .trick {
  font-family: 'Spartan', sans-serif;
  padding-top: 3px;
  }
<html>
  <head>
    <link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Spartan&display=swap" rel="stylesheet">
  </head>
  <body>
    <button>Click me</button>
    <button class="trick">Click me</button>
  </body>
</html>

输入也已修复

button, input {
    font-family: 'Spartan', sans-serif;
    vertical-align: middle;
}
  
  input {
    padding-top: 4px;
}
  
<html>
  <head>
    <link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Spartan&display=swap" rel="stylesheet">
  </head>
  <body>
    <button><span style="vertical-align: sub;">Click me</span></button>
    <input type="text" value="Hello world" />
    </body>
</html>

【讨论】:

  • 所以我想知道为什么大多数字体都可以正常工作而这个却不行。此外,它似乎不仅是按钮的问题,也是文本输入的问题。
  • 正如约翰内斯所解释的那样。当您在输入中标记文本时,您可以看到它。我在 kuznetsovs 评论下的评论中解释了输入的一个小技巧。 button, input {font-family: 'Spartan', sans-serif;vertical-align: middle;} input {padding-top: 4px;} 应该在视觉上修复它。
  • 它仍然取决于文本内容(请参阅我对问题的最后评论),因此实际上您必须始终根据文本调整填充值(即,它是否包含带有下降的字母)
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2013-08-13
  • 2021-06-26
相关资源
最近更新 更多