Я думаю, что проблема в относительно высокой высоте Х Готики. Попробуйте использовать ex
единиц в вашей декларации font-size
. ex
единицы основаны на высоте, в отличие от em
, px
и pt
.
Установка line-height
на размер в пикселях также поможет нормализовать высоту, но создаст проблемы для пользователей, которые изменяют уровень масштабирования текста в своем браузере.
Редактировать: Я вернулся и проверил, и бывшие юниты не помогают. Century Gothic выше и шире остальных.
Проблема в том, что DOM не позволит вам определить, какой конкретный шрифт у пользователя из перечисленных альтернатив, а CSS не позволяет использовать отдельные размеры (или корректировки) шрифта для каждого шрифта. 1018 *
Однако 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 была проблема с размерами шрифта со многими числами после десятичной точки, поэтому я округлил. Должно быть достаточно близко.
- Я использовал ширину одной буквы "м". Если вы хотите получить более точный результат, вы можете использовать более длинную строку букв при условии , которая не переносится в браузере пользователя (что может нарушить проверку ширины). Несколько заглавных и строчных букв и пробел должны быть хорошим тестом.