определить размер шрифта браузера

Можно ли определить размер шрифта браузера? Также возможно ли определить новый размер шрифта, когда пользователь меняет размер шрифта при выборе меню? Большое спасибо всем за помощь. С наилучшими пожеланиями.


person Community    schedule 11.04.2009    source источник


Ответы (6)


Можно ли определить размер шрифта браузера?

Типа, но это редко бывает хорошей идеей. Предполагая, что для ‹body> не задан размер шрифта и нет мешающих правил (таких как «body div»):

var measure= document.createElement('div');
measure.style.height= '10em';
document.body.appendChild(measure);
var size= measure.offsetHeight/10;
document.body.removeChild(measure);

дает вам размер в пикселях 1em.

Также возможно ли определить новый размер шрифта, когда пользователь меняет размер шрифта при выборе меню?

Не напрямую, но вы можете время от времени опрашивать функцию измерения, подобную приведенной выше. В IE вы можете повесить галочку на выражение CSS(), так как они пересчитываются при изменении размера шрифта (среди многих других случаев), но это, вероятно, того не стоит (вам все равно понадобится опросник для других браузеров и выражение ( ) в любом случае устарела).

person bobince    schedule 11.04.2009
comment
Просто решил указать, что это работает только тогда, когда корневой элемент на странице (элемент <html>) имеет font-size 100%. Если вы знаете размер шрифта вашего корневого элемента, вы можете рассчитать размер шрифта пользователя, поставив size = size * whateverMyCssDefinesAsBaseSize / 100 в конце теста @bobince. - person Paul d'Aoust; 09.06.2012

Насколько я знаю, нет способа узнать. Вы просто предполагаете, что размер по умолчанию составляет 16 пикселей, что является стандартом.

Лучше всего установить все размеры шрифта в ems, которые масштабируются в соответствии с базовым размером шрифта.

Большинство людей устанавливают базовый шрифт в 10 пикселей, что облегчает работу с ems.

Пример

16px = 1em

p {
    font-size:2em;
}

Это будет равно 32px


10px = 0.625em

body {
    font-size:0.625em;
}

p {
    font-size:2em;
}

Это будет равно 20px;

Я надеюсь, что это помогло.

person The Pixel Developer    schedule 11.04.2009
comment
Я думаю, что вы имеете в виду «рем», а не «их». «rem» относится к размеру шрифта элемента ‹HTML›, а «em» относится к любому родительскому элементу цели. sitepoint.com/understanding-and-using-rem-units -в CSS - person SunshinyDoyle; 23.10.2020

Короткий ответ: нет. Однако я подозреваю, что вы хотите указать разные размеры для разных элементов в зависимости от размера шрифта пользователя. Если это так, вы можете взглянуть на указание правил CSS в «em», который определяется как относительный к текущему размеру шрифта.

person Deniz Dogan    schedule 11.04.2009
comment
Привет, Скорпан, я получил от тебя положительный ответ. Не могли бы вы объяснить свою идею? У вас есть пример? Спасибо еще раз. С наилучшими пожеланиями. - person ; 11.04.2009
comment
Я был в отъезде, поэтому не смог вовремя ответить. Разработчик Pixel ответил прекрасным примером! - person Deniz Dogan; 11.04.2009

мне нужно было то же самое. здесь я нашел лучший ответ.

https://developer.mozilla.org/en-US/docs/DOM/window.getComputedStyle

person Guy Guy    schedule 08.01.2013

Моей мотивацией для отслеживания изменений размера текста является динамическое изменение высоты (или ширины) элементов, чтобы для всей страницы не требовались полосы прокрутки в окне браузера. Обычно, когда вы делаете это, вы реагируете на событие изменения размера, но изменения размера шрифта также могут повлиять на ваши вычисления. Мне все равно, каков фактический размер шрифта, мне просто нужно знать, когда он меняется.

Вот некоторый код jQuery, который я использую. Это похоже на решение, предложенное bobince. У меня есть функция изменения размера, которая будет обновлять высоту div и т.д.

$(window).resize(resize); // update when user resizes the window.

$("body").append("<p id='textSizeReference' style='display:none;padding:0'>T</p>");
var refTextHeight = $("#textSizeReference").height();
setInterval(function() {
    var h = $("#textSizeReference").height();
    if (h != refTextHeight) {
        refTextHeight = h;
        resize(); // update when user changes text size
    }
}, 500);

Если это приложение ajax, которое опрашивает изменения в location.hash, вы можете использовать ту же функцию опроса для изменения размера текста.

person John Snyders    schedule 10.08.2009

Вот что я нашел, что хорошо работает для определения текущего семейства шрифтов документа в IE:

document.documentElement.currentStyle["fontFamily"]

в Firefox/Опере:

Существует метод getComputedStyle, который должен возвращать стиль css для определенного заданного элемента, но я еще не придумал, как заставить его возвращаться ко всему документу.

Надеюсь, это немного поможет!

person Matt    schedule 07.07.2011
comment
Чтобы вернуть его для всего документа, выполните getComputedStyle(document.documentElement). Выполнение getComputedStyle(document) никогда не сработает, поскольку атрибут стиля является частью интерфейса HTMLElement. И документ не наследует свойства интерфейса HTMLElement: это всего лишь узел, а не пространственный элемент. Таким образом, узел документа сам по себе не имеет стиля, поэтому вы не можете getComputedStyle работать с ним. - person Jack Giffin; 25.11.2017