Как я могу получить размер шрифта по умолчанию в пикселях с помощью JavaScript или jQuery?
-
22-07-2019 - |
Вопрос
Как вы знаете, em - это относительное измерение шрифта, где один em равен высоте буквы "M" в размере шрифта по умолчанию.Преимущество его использования заключается в том, что вы сможете изменять размер текста.
Но как я могу получить размер шрифта по умолчанию для текущей среды (в пикселях) с помощью JavaScript или jQuery?
с уважением,
Решение
Есть пара ситуаций, в которых это может быть полезно-
function getDefaultFontSize(pa){
pa= pa || document.body;
var who= document.createElement('div');
who.style.cssText='display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em';
who.appendChild(document.createTextNode('M'));
pa.appendChild(who);
var fs= [who.offsetWidth, who.offsetHeight];
pa.removeChild(who);
return fs;
}
предупреждение(getDefaultFontSize())
Другие советы
Я считаю, что М-принцип - это миф.По крайней мере, следующая документация из http://www.w3.org/TR/CSS21/syndata.html доказывает, что вычисления, основанные на М-принципе, чрезмерно сложны и не нужны.
Единица измерения 'em' равна вычисленному значению свойства 'font-size' элемента, для которого оно используется. Исключением является случай, когда 'em' встречается в значении свойства 'font-size' самого по себе, и в этом случае оно относится к размеру шрифта родительского элемента.Он может использоваться для вертикального или горизонтального измерения.(Эта единица измерения также иногда называется четырехширинной в типографских текстах.)
Из этой документации следует, что верно следующее.
Без увеличения предка 1em в точности равен размеру шрифта в пикселях.
Поскольку увеличение предка с помощью ems и процента работает четко определенными способами, простой цикл вычислит точные размеры шрифта, предполагая:никаких криминалистов;и у какого-то предка размер шрифта задан в абсолютных единицах.
Поскольку ems измеряет ширину, вы всегда можете вычислить точный размер шрифта в пикселях, создав div длиной 1000 ems и разделив его свойство client-Width на 1000.Кажется, я припоминаю, что ems усекаются до ближайшей тысячной, поэтому вам нужно 1000 ems, чтобы избежать ошибочного усечения результата в пикселях.
Вероятно, вы можете создать шрифт, в котором M-принцип терпит неудачу, поскольку em основан на атрибуте font-size, а не на самом шрифте.Предположим, у вас странный шрифт, где M составляет 1/3 размера других символов, и у вас размер шрифта 10 пикселей.Я вроде как думаю, что размер шрифта является гарантией максимальной высоты символа, и поэтому M не будет составлять 10 пикселей, а все остальные символы - 30 пикселей.
Один трюк, который я видел / использовал в прошлом, заключается в рендеринге некоторого текста (скажем, 50 произвольных символов или Мс), а затем измерении размера рендеренного контейнера и выполнении математических расчетов для определения высоты и ширины одного символа.Это то, к чему ты стремишься?Вы можете выполнять рендеринг в фоновом режиме, чтобы пользователь этого не видел.
Использование jQuery (при условии, что вам нужен размер шрифта определенного элемента):
var originalFontSize = $('#your_element_id_here').css('font-size')
;
Если вы используете Prototype наряду с jQuery, вам захочется использовать префикс jQuery вместо знака доллара:
var originalFontSize = jQuery('#your_element_id_here').css('font-size');
Это вернет значение в виде строки примерно так:16 пикселей.
Это можно сделать, используя эту строку кода:
const fontSize = Number(window.getComputedStyle(document.body).getPropertyValue('font-size').match(/\d+/)[0])
window.getComputedStyle(document.body)
- чтобы получить все стили для телаgetPropertyValue('font-size')
- чтобы получить строковое значение размера шрифта, пример: (16 пикселей)match(/\d+/)[0])
- чтобы получить только числовую часть, пример: (16) - строкаNumber(...)
- чтобы преобразовать числовую часть в число, пример: (16) - число
Хотя кажется, что получение размера шрифта по умолчанию может быть хорошей идеей - если это делается для настройки макета ваших страниц и тому подобного, вероятно, безопаснее просто позволить пользователю справиться с этим.
Если у них размер шрифта больше - это потому, что они слепые, и наоборот.Я бы рекомендовал установить значения по умолчанию и "рекомендовать" разрешение / размер.Если только ваше приложение не зависит от этого - позвольте пользователю справиться с этим.
Это работает в FF.
<script>
function getStyle(el,styleProp)
{
var x = document.getElementById(el);
if (x.currentStyle)
var y = x.currentStyle[styleProp];
else if (window.getComputedStyle)
var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp);
return y;
}
function GetSt()
{
var font_size = getStyle("div2","fontSize");
alert ( font_size );
}
</script>
<div id="div1" style="height: 100px;font-size: 20px;">
<div id="div2" style="font-size: 2em;">
test
</div>
</div>
<button onclick="GetSt();">Click</button>
Я думаю, это то, что вы ищете:
function getDefaultFontSize () {
// this will return the default* value assigned to the style: fontSize
defsize=(document.body.style.fontSize)
alert('The default font size of your browser is: "' + defsize + '"');
}
*Если в body где-либо еще в коде указано другое значение размера шрифта (возможно, в каком-нибудь css), функция вернет это значение.Например:
<style>body{font-size:20px;}</style>
<script>function getDefaultFontSize () {
defsize=(document.body.style.fontSize)
} </script>
Приведенное выше действие вернет значение размера шрифта 20 пикселей.
Полностью протестирован и работает у меня (chrome 22.0.1229.94 m и firefox 13.01).