Mac/PC 上的字体渲染/行高问题(元素外)

设计

信息小部件的内容应该在中间垂直对齐:

Original PSD Design


编码设计

Windows: Chrome 20/FF 14/IE 9

Windows Coded Design

Mac (Lion/Mt Lion) : Chrome/FF

Mac Coded Design


准则

超文本标示语言

<div class="info">
<div class="weather display clearfix">
<div class="icon"><img src="imgs/icons/thunderstorms.png" align="Thunderstorms" /></div>


<div class="fl">
<p class="temperature">82&deg; / 89&deg;</p>
<p class="conditions">Thunderstorms</p>
</div>
</div>
<div class="time display">
<p>11:59 <span>AM</span></p>
</div>
<div class="date display clearfix">
<p class="number fl">23</p>
<p class="month-day fl">Jun <br />Sat</p>
</div>
</div><!-- //.info -->

CSS

.info {
display:table;
border-spacing:20px 0;
margin-right:-20px;
padding:6px 0 0;
}
.display {
background-color:rgba(255, 255, 255, .2);
border-radius:10px;
-ms-border-radius:10px;
color:#fff;
font-family:"Cutive", Arial, sans-serif;
display:table-cell;
height:70px;
vertical-align:middle;
padding:3px 15px 0;
}
.display p {padding:0;line-height:1em;}
.time, .date {padding-top:5px;}
.time p, .date .number {font-size:35px;}
.time span, .display .month-day, .conditions {
font-size:14px;
text-transform:uppercase;
font-family:"Maven Pro", Arial, sans-serif;
line-height:1.15em;
font-weight:500;
}
.display .month-day {padding-left:5px;}
.icon {float:left;padding:0 12px 0 0}
.display .temperature {font-size:24px;padding:4px 0 0;}
.display .conditions {text-transform:none;padding:2px 0 0;}
.lt-ie9 .display { /* IE rgba Fallback */
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#20ffffff,endColorstr=#20ffffff);
zoom:1;
}

问题

看看上面的图像的编码设计,你可以看到如何出现抛出的对齐。在进一步查看时,文本将在 mac 上的元素之外呈现。

窗户

Windows Coded Design Alignment

麦克

Mac Coded Design Alignment


注意

我正在通过一个谷歌网页字体样式表嵌入字体。


测试

我试过以下方法:

  • 设置每个元素的行高。
  • 为每个元素设置字体重量。
  • 设置每个元素的高度。
  • 每个元素的高度/填充顶部的组合。
  • 用于填充的百分比/em/px。

似乎不管我怎么尝试,内容永远不会在 Mac 和 PC 之间完美地居中对齐。


我的问题

是否有可能以一种简单的方式实现我正在尝试做的事情?

我是否应该放弃 display:table-cell;路线,在每个元素和子元素上设置特定的高度/填充?我仍然会遇到两个操作系统之间的间距问题。

我应该把这个问题归类为什么? 行高? 表格单元格? 操作系统? 等等。

先谢谢你!

39598 次浏览

部分问题可能在于 Windows/Mac OSX 呈现字体的方式。特别是那些通过@font-face 引入的。您是否尝试过切换正在使用的字体格式?

Mac 正确地显示基线以下的长度属于线的高度。OS X 似乎是自下而上计算的,而 Windows 是从上而下计算的。

因为1em 是所用字体的大写 M 的宽度,所以它通常小于字体的整体高度。

是否尝试将 line-height 设置为与元素 height 相同?这通常有助于解决这类问题。

如果使用不同的字体(Arial)解决,那么问题就出在字体上,而不是 CSS。正如您所注意到的,不同浏览器的字体呈现是不同的。

一个可能的解决方案是下载 Cutive 字体(我看到它有一个 SIL 许可证) ,然后通过字体松鼠字体面生成器运行它。在“专家”模式有一个选项“修复垂直度量”,这可能是你正在寻找的。

我目睹了同样的问题,使用 FastFonts 提供的自定义字体(贸易哥特式)。

Windows 做了它应该做的。但是所有其他基于 Linux 的机器上的浏览器,Mac,iOS,Android 都遇到了这个问题。

我唯一的解决方案是在用户代理上进行匹配,并在主体标记的名称空间中使用. not-win

然后,我的样式可以覆盖特定于非窗口设备的行高。

这是由于字体格式的历史和 Windows/Mac 的战争,有不同的方法来计算行的高度,如果他们不同步的字体,你使用的东西会出错在一些系统

您需要修复您的字体(如果许可允许)或切换到一个没有这个问题

更好的是,不要让你的设计取决于一个确切的价值在这里

既然你在对 Jordan Brown 的评论中说使用 Arial 可以使对齐更完美,那么这就是一个字体问题。很可能创建字体的人没有正确设置 Ascent 值。

如果您有 TTF,上传到 FontSquirrel,选择“专家”选项,然后保留所有默认选项。我认为修正这个问题的方法是“修正垂直度量”但是我在更改默认值时遇到了问题,所以我建议保持它们的原样。

现在字体行高度在 MAC 和 PC 上呈现相同(这对我很有效)。

我对这个(非常恼人的问题)的解决方案是:

  • 将所有元素设置为 float: left;

  • 设置显式的行高;

享受对跨浏览器/平台 css 荒谬性的胜利。

我遇到了这个问题与自定义字体,已经创建了客户的品牌。我在 Font Forge 中打开了 TTF 字体。我创建渲染一致性的方法是调整 Element-> Font Info-> OS/2-> Metrics 中的值。

Win 上升/下降值的工作方式似乎与其他值不同:

Win Ascent: 1000

Win Descent: 0

Typo Ascent: 750

Typo Descent: -250

HHead Ascent: 750

HHead Descent: -250

我将 Win 上升和下降值更改为:

Win Ascent: 750

Win Descent: 250(注意正值)

看起来你需要匹配的价值,除了在我的情况下,我需要反转的赢下降的价值到一个积极的。

我对字体的知识非常有限,但这确实解决了我的问题。我生成的字体作为 TTF,然后运行它通过一个网络字体生成器。这些字体现在在 Mac/Windows 7/Android/iOS 上呈现方式完全相同。

希望这对谁有帮助。

我也碰到了这个问题。卢克的回答帮了我。我不得不使用以下设置来调整 FontForge 的字体:

FontForge Settings

取消选中所有“是偏移量”复选框和“真正使用打印度量”复选框。我在 Firefox 和 IE 上遇到的问题最多。玩弄“ Win Descent”的价值为这两个浏览器修复了它。

对于那些不能使用字体松鼠,我可以确认,这个问题可以在字体锻造固定与我工作的字体。基于 Luke 提供的答案,下面是我所遵循的步骤(这里没有新的信息,只是提供了简单易懂的说明) :

1)安装 FontForge (免费) 下载地址: Https://fontforge.github.io/

2)在 FontForge 中打开有问题的字体

3)选择 Element > Font Info enter image description here

4)在左侧面板上,单击 OS/2,然后单击 Metrics 选项卡

5)将 Win Ascent 改为与 HHead Ascent 相同的数字,Win Descent 改为 HHead Descent 的正值(即删除负号) ,然后单击 OK。(如果这些数字不能解决问题,试着调整它们,直到找到能修复特定字体问题的数字。) enter image description here

6)按档案 > 产生字型。为字体选择字体类型。如果字体是。Otf 字体,选择 OpenType (CFF)。取消选中“保存前验证”。为新的字体文件设置名称。单击 Generate。 enter image description here

感谢为这个问题贡献答案的每一个人!

我认为使用这个网站 https://transfonter.org/将节省您的时间,而不是下载 FontForg 程序,上传您的字体和切换“修复垂直指标” 然后点击转换,它会给你一个可下载的压缩文件夹与所有类型你选择 enter image description here