Преобразование em в px в Javascript (и получение размера шрифта по умолчанию)Javascript

Форум по Javascript
Ответить
Гость
 Преобразование em в px в Javascript (и получение размера шрифта по умолчанию)

Сообщение Гость »


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

Как получить размер шрифта по умолчанию в пикселях с помощью JavaScript или JQuery?

Этот вопрос касается получения размера шрифта по умолчанию, который необходим для преобразования относительного значения em в точное px ценить.

В этом ответе содержится довольно хорошее объяснение того, как получить размер шрифта элемента по умолчанию:

Поскольку ems измеряет ширину, вы всегда можете вычислить точный размер шрифта в пикселях. размер, создав div длиной 1000 em и разделив его client-Width на 1000. Кажется, я помню, что em усекаются до с точностью до тысячной, поэтому нужно 1000 ems, чтобы избежать ошибочного усечение результата пикселя.

Итак, используя этот ответ в качестве руководства, я написал следующую функцию, чтобы получить размер шрифта по умолчанию:

функция getDefaultFontSize(parentElement) { родительскийЭлемент = родительскийЭлемент || документ.тело; вар div = document.createElement('div'); div.style.width = "1000em"; родительскийЭлемент.appendChild(div); var пикселей = div.offsetWidth/1000; родительскийЭлемент.removeChild(div); возврат пикселей; } После того как у вас есть размер шрифта по умолчанию, вы можете преобразовать любую ширину em в ширину px, просто умножив ems на размер шрифта элемента по умолчанию и округлив результат:

Math.round(ems * getDefaultFontSize(element.parentNode))

Проблема: В идеале getDefaultFontSize должна быть простой функцией без побочных эффектов, возвращающей размер шрифта по умолчанию. Но у него ДЕЙСТВИТЕЛЬНО есть неприятный побочный эффект: он изменяет DOM! Он добавляет дочерний элемент, а затем удаляет его. Добавление дочернего элемента необходимо для получения допустимого свойства offsetWidth. Если вы не добавите дочерний элемент div в DOM, свойство offsetWidth останется равным 0, поскольку элемент никогда не отображается. Несмотря на то, что мы немедленно удаляем дочерний элемент, эта функция все равно может создавать непредвиденные побочные эффекты, такие как запуск события (например, onpropertychange в Internet Explorer или события DOMSubtreeModified в W3C), которое прослушивало на родительском элементе.

Вопрос: Есть ли способ написать действительно свободную от побочных эффектов функцию getDefaultFontSize(), которая не будет случайно запускать обработчики событий или вызывать другие непредвиденные побочные эффекты?
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»