Google Chrome 浏览器中的文本垂直对齐错误

问题描述 投票:0回答:3

我在创建“按钮”元素(带边框的内联块容器中的文本)时遇到问题,因为在某些字体大小文本中垂直对齐错误(不是完美的中间)。

我想使用 Raleway(Google Web 字体)和 Bootstrap。 文本容器的高度由行高设置。

我正在 Windows 7...

上进行测试

Firefox(版本 36)上一切都很完美 Firefox (ver. 36)

但问题出在 Google Chrome(版本 41)上 Google Chrome (ver. 41)

实时预览:http://biznes-dynamit.pl/test/marcin-dobroszek/font/

部分CSS代码:

/*Bootstrap default style*/
* {
    box-sizing: border-box;
}
.btn {
    display: inline-block;
    vertical-align: middle;
}

/*custom style*/
body {
    font-family: "Raleway";
}
.btn {
    padding-top: 0;
    padding-bottom: 0;
    line-height: 16px;
    font-size: 11px; /*real height: 8*/
}
.btn-sm {
    font-size: 10px; /*real height: 7*/
    line-height: 15px;
 }
.btn-lg {
    font-size: 12px; /*real height: 8-9*/
    line-height: 16px; /*light, normal*/
 }

正如您在 Chrome 预览中看到的某些字体大小和字体粗细文本向上移动相对容器。

3倍缩放示例,字体大小:11px(行高:16px),字体粗细:半粗体。 wrong vertical space

顶部和底部空间(文本和顶部/底部边框之间)应该相同:4px,但如您所见,顶部空间为 3px,底部空间为 5px。

可以解决这个浏览器问题吗?

css google-chrome fonts vertical-alignment google-webfonts
3个回答
1
投票

这个非常烦人的问题是由于 chrome 没有考虑到

text-transform: uppercase
造成的。使用以下命令在 Chrome 中使用全大写文本获得正确居中:

text-transform: lowercase;
font-variant: small-caps;

小提琴:http://jsfiddle.net/fyvyB/76/

非常适合按钮,对于其他用例,您可能会遇到文本为小型大写字母而不是真正的大写字母的问题。

Correct centering in chrome & ff


0
投票

自定义字体也有类似的问题。经过一番尝试并尝试了文本元素上的所有不同显示属性后,我注意到垂直对齐问题仅影响父级为

display: block;
的文本元素,尽管所述文本元素被设置为
display: inline;
。我通过将父母更改为
display: table;
并将子文本 elem 更改为
display: inline;
解决了这个问题,例如下面...我无法解释为什么这有效,但在这里发帖以防对其他人有帮助...

<style>
  div {
    display: table;
  }
  span {
    display: inline;
    padding: 5px 10px; /* to make v-alignment clearer */
  }
</style>
<div>
  <span>Some text here</span>
</div>

0
投票

我遇到了同样的问题,但使用的是 Nimbus Sans 而不是 Raleway。我可以通过使用

@font-face
并在加载字体时设置
ascent-override: 100%
来解决这个问题。

这是一个在 Firefox v126 上垂直居中的示例,但在 Chromium v125 上不居中:

#wrapper {
  height: 128px;
  color: white;
  display: flex;
  margin: .5em;
}

div div {
  border-radius: 1rem;
  padding: .5em;
  display: flex;
  align-items: center;
  background-color: #f22;
}

span {
  font-size: 4rem;
  border: 1px solid;
}

/* monospace generic font family so it's obvious if the main font isn't used */
#nimbus {
  font-family: "Nimbus Sans", monospace;
}
<div id="wrapper">
  <div><span id="nimbus">Text</span></div>
</div>

通过指定覆盖

ascent-override
属性,我们现在可以在 Firefox 和 Chromium 之间获得一致的结果:

/* Fixes inconsistent ascent issue in Chromium browsers. */
@font-face {
  font-family: "Nimbus Sans";
  src: local("Nimbus Sans"), format("woff");
  ascent-override: 100%;
}

#wrapper {
  height: 128px;
  color: white;
  display: flex;
  margin: .5em;
}

div div {
  border-radius: 1rem;
  padding: .5em;
  display: flex;
  align-items: center;
  background-color: #f22;
}

span {
  font-size: 4rem;
  border: 1px solid;
}

/* monospace generic font family so it's obvious if the main font isn't used */
#nimbus {
  font-family: "Nimbus Sans", monospace;
}
<div id="wrapper">
  <div><span id="nimbus">Text</span></div>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.