Я ищу надежный способ получить ширину окна в единицах em с помощью javascript. Я был удивлен, увидев, что jQuery вернет результат измерениям пикселей. Любая помощь приветствуется.Можно ли получить ширину окна в единицах em с помощью javascript?
ответ
Это похоже на работу:
$(window).width()/parseFloat($("body").css("font-size"));
. Для тех, кто полагается на размер шрифта% и медиа-запросы, измените $ («body»). Css («font-size») на $ («html»). css («font-size»), чтобы получить точную ширину окна в em. – ontananza
Приятная вещь в этом подходе заключается в том, что он становится чрезвычайно гибким, так как можно изменить ** $ (window) .width() **, независимо от цели. – blackhawk
ЭТО БОЛЬШОЕ. Я искал это в течение часа. – salep
Это можно вычислить, но 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;
}
Простой, так как мы знаем 1em = 16px
var window_width_em = 1/16 * window_width_px;
Предполагая, что 1em быть 16 px вводит неверно. Em единиц относятся к каскадному размеру шрифта элемента. Добавление css 'html {font-size: 10px; } 'или' html {font-size: 1.5em; } 'приведет к 1em ***! = *** 16px. Кроме того, контроль над разработчиками заключается в том, что «стандартный размер шрифта 16px» установлен пользовательским агентом и может быть *** изменен пользователем по прихоти ***. –
Этот ответ по-прежнему не прав, независимо от того, сколько из моих ответов вы голосуете :) –
Для тех, кто в ней нуждается все это вместе, этот код работает для меня:
<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, найденный в связанном учебнике.
Вот решение, которое не требует jQuery и не требует явного объявления размера шрифта.
window.innerWidth/
parseFloat(getComputedStyle(document.querySelector('body'))['font-size'])
+1 - не будет иметь значения, но 'html' будет несколько более корректным *, чем' body', для em берет корневой шрифт размер, и это html's – m02ph3u5
em по сравнению с вашими шрифтами. Если размер вашего шрифта равен 12 px, ширина окна, разделенная на 12, даст вам эквивалентную сумму em. Это зависит от того, какой шрифт вы хотите, чтобы он относился к – kmb64