我认为问题在于 Century Gothic 相对较高的 x 高度。尝试在声明中使用ex单位。单位基于高度,与、和不同。font-sizeexempxpt
将 设置line-height为像素大小也有助于标准化高度,但会给在浏览器中更改文本缩放级别的用户带来问题。
编辑:我回去测试了,前单位没有帮助。Century Gothic 比其他的更高更宽。
问题是,DOM不允许您从列出的替代字体中分辨出用户使用哪种特定字体,并且 CSS 不允许为每种字体单独设置字体大小(或调整)。
但是,JQuery可以测试文本容器的大小。因此,如果您在页面上提供了一个带有已知字母的隐藏元素,则可以在用户浏览器上测试该元素的宽度。
由于该字母的宽度将由用户安装的字体决定,因此您可以将该宽度与您自己计算机上首选字体的相同文本的宽度进行比较,并为用户计算出与您的字体大致匹配的字体大小故意的。
示例代码:
<style>
p { font-size: 15pt;
font-family:"Tw Cen MT","Gill Sans","Century Gothic",sans-serif;
}
p#testwidth {
/* Ensure test is invisible and isn't messed up with borders, etc. */
margin:0; padding:0; border:none; color:white; display:inline;
}
</style>
<p>Your text goes here.</p>
<p id="testwidth">m</p>
<script language="Javascript">
window.onload = function() {
// Same as your default CSS for font-size (just the number, not the units)
var desiredFontSize = 15;
// Experiment by testing width when Tw Cen MT *is* available. In pixels.
var expectedWidth = 17;
// width found will depend which font is available
var testedWidth = $('#testwidth').width();
// ratio, rounded to one decimal point
var normalizedFontSize = Math.round(
expectedWidth / testedWidth * desiredFontSize * 10) / 10;
// change the stylesheet to "fix" the font size (in your preferred units)
$('p').css('font-size', normalizedFontSize + 'pt');
}
四个警告:
- 它不一定会克服两种备用字体之间的所有大小差异。如果没有您喜欢的字体,垂直对齐等可能并不完美。
- 它可能会惹恼在浏览器中设置了默认文本缩放级别的用户,因为这实际上会在页面加载时强制字体大小。幸运的是,他们仍然可以根据需要放大或缩小并覆盖您的强制字体大小。
- 我似乎记得 IE 的字体大小有问题,小数点后有很多数字,所以我四舍五入。应该够近了。
- 我使用了单个字母“m”的宽度。如果您想要更准确的结果,您可以使用更长的字母字符串,前提是它不会在用户的浏览器上换行(这会破坏宽度测试)。几个大小写字母和一个空格应该是一个很好的测试。