2012-09-03 3 views
25

Я ищу надежный способ получить ширину окна в единицах em с помощью javascript. Я был удивлен, увидев, что jQuery вернет результат измерениям пикселей. Любая помощь приветствуется.Можно ли получить ширину окна в единицах em с помощью javascript?

+3

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

ответ

43

Это похоже на работу:

$(window).width()/parseFloat($("body").css("font-size")); 
+4

. Для тех, кто полагается на размер шрифта% и медиа-запросы, измените $ («body»). Css («font-size») на $ («html»). css («font-size»), чтобы получить точную ширину окна в em. – ontananza

+0

Приятная вещь в этом подходе заключается в том, что он становится чрезвычайно гибким, так как можно изменить ** $ (window) .width() **, независимо от цели. – blackhawk

+0

ЭТО БОЛЬШОЕ. Я искал это в течение часа. – salep

0

Это можно вычислить, но em не «простой» блок, как px, потому что это зависит от выбора шрифта (то есть, сочетание гарнитуры семьи , стиль (жирный, курсив и т. д.) и размер шрифта. Конечно, сам размер шрифта может быть относительным (например, если вы даете шрифт em, ex или процентный размер, тогда вычисленная высота px для этого шрифта выводится из размера родительского элемента).

Чтобы получить em ширину страницы, вы можете сделать преобразование, как это (предупреждение: psuedocode):

// For this to work reliably, size should be in px, pt, or mm. 
function getWindowWidthInEm(fontFamily, style, size) { 
    var box = document.createElement("span"); 
    box.innerText = "M"; 
    box.style.fontFamily = fontFamily; 
    box.style.fontSize = size; 
    box.style.fontWeight = style is bold; 
    box.style.fontStyle = style is italic; 

    var body = document.getElementsByTagName("body")[0]; 
    body.appendChild(box); 

    var emInPx = box.getComputedStyle().width; 

    body.removeChild(box); 

    var windowPx = window.width; 
    return windowx/emInPx; 
} 
-15

Простой, так как мы знаем 1em = 16px

var window_width_em = 1/16 * window_width_px; 
+14

Предполагая, что 1em быть 16 px вводит неверно. Em единиц относятся к каскадному размеру шрифта элемента. Добавление css 'html {font-size: 10px; } 'или' html {font-size: 1.5em; } 'приведет к 1em ***! = *** 16px. Кроме того, контроль над разработчиками заключается в том, что «стандартный размер шрифта 16px» установлен пользовательским агентом и может быть *** изменен пользователем по прихоти ***. –

+15

Этот ответ по-прежнему не прав, независимо от того, сколько из моих ответов вы голосуете :) –

1

Для тех, кто в ней нуждается все это вместе, этот код работает для меня:

<p>Window size: <span id="width_px"></span> pixels or <span id="width_ems"></span> ems</p> 
<script> 
    window.onresize = function() { 
    document.getElementById("width_px").innerHTML = window.innerWidth; 
    document.getElementById("width_ems").innerHTML = window.innerWidth/parseFloat($("body").css("font-size")); 
    }; 
</script> 

Это pu t вместе, используя ответ выше, добавленный в window-width test code, найденный в связанном учебнике.

11

Вот решение, которое не требует jQuery и не требует явного объявления размера шрифта.

window.innerWidth/
    parseFloat(getComputedStyle(document.querySelector('body'))['font-size']) 
+1

+1 - не будет иметь значения, но 'html' будет несколько более корректным *, чем' body', для em берет корневой шрифт размер, и это html's – m02ph3u5

 Смежные вопросы

  • Нет связанных вопросов^_^