getComputedStyle
使用扩展html
标签。
getComputedStyle
使用扩展html
标签。
Answers:
@media (width)
和@media (height)
价值观 const vw = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);
const vh = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);
window.innerWidth
和 .innerHeight
@media (width)
,@media (height)
其中包括滚动条initial-scale
和缩放变化可能导致移动值错误地缩小到PPK称为可视视口的@media
值,并且小于该值undefined
在IE8中document.documentElement.clientWidth
和 .clientHeight
@media (width)
并@media (height)
时有没有滚动条jQuery(window).width()
它的jQuery 调用浏览器窗口<!DOCTYPE html>
在页面顶部具有,才能使代码正常工作。
document.documentElement.clientHeight
返回页面高度,而window.innerHeight
返回视口高度。很大的区别。
$(window).width()
和 $(window).height()
$(window).height();
返回536,而$("html").height();
返回10599
您可以使用window.innerWidth和window.innerHeight属性。
document.documentElement.clientWidth
与window.innerWidth
document.documentElement.clientWidth
给我视口宽度,而window.innerWidth给我文档宽度。是的,就是这样。
如果您不使用jQuery,它将变得很丑陋。这是一个适用于所有新浏览器的代码段。在IE的Quirks模式和标准模式下,行为是不同的。这样就好了。
var elem = (document.compatMode === "CSS1Compat") ?
document.documentElement :
document.body;
var height = elem.clientHeight;
var width = elem.clientWidth;
clientHeight
的上document.documentElement
元素,这将给你的视口大小。要获取文档大小,您需要执行document.body.clientHeight
。正如Chetan所解释的,这种行为适用于现代浏览器。这很容易测试。只需打开控制台并document.documentElement.clientHeight
在几个打开的选项卡上键入即可。
我知道这是可以接受的答案,但是我遇到了一种情况 clientWidth
无法正常工作的情况,因为iPhone(至少是我的)返回了980,而不是320,所以我用了window.screen.width
。我在现有网站上工作,变得“反应灵敏”,需要强制较大的浏览器使用其他元视图。
希望这对某人有帮助,可能并不完美,但可以在我在iOs和Android上进行的测试中使用。
//sweet hack to set meta viewport for desktop sites squeezing down to mobile that are big and have a fixed width
//first see if they have window.screen.width avail
(function() {
if (window.screen.width)
{
var setViewport = {
//smaller devices
phone: 'width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no',
//bigger ones, be sure to set width to the needed and likely hardcoded width of your site at large breakpoints
other: 'width=1045,user-scalable=yes',
//current browser width
widthDevice: window.screen.width,
//your css breakpoint for mobile, etc. non-mobile first
widthMin: 560,
//add the tag based on above vars and environment
setMeta: function () {
var params = (this.widthDevice <= this.widthMin) ? this.phone : this.other;
var head = document.getElementsByTagName("head")[0];
var viewport = document.createElement('meta');
viewport.setAttribute('name','viewport');
viewport.setAttribute('content',params);
head.appendChild(viewport);
}
}
//call it
setViewport.setMeta();
}
}).call(this);
我看了一下,发现了一种跨浏览器的方式:
function myFunction(){
if(window.innerWidth !== undefined && window.innerHeight !== undefined) {
var w = window.innerWidth;
var h = window.innerHeight;
} else {
var w = document.documentElement.clientWidth;
var h = document.documentElement.clientHeight;
}
var txt = "Page size: width=" + w + ", height=" + h;
document.getElementById("demo").innerHTML = txt;
}
<!DOCTYPE html>
<html>
<body onresize="myFunction()" onload="myFunction()">
<p>
Try to resize the page.
</p>
<p id="demo">
</p>
</body>
</html>
我可以在JavaScript中找到一个明确的答案:第6版,由O'Reilly撰写的《权威指南》,第1页。391:
该解决方案甚至可以在Quirks模式下工作,而ryanve和ScottEvernden当前的解决方案则不行。
function getViewportSize(w) {
// Use the specified window or the current window if no argument
w = w || window;
// This works for all browsers except IE8 and before
if (w.innerWidth != null) return { w: w.innerWidth, h: w.innerHeight };
// For IE (or any browser) in Standards mode
var d = w.document;
if (document.compatMode == "CSS1Compat")
return { w: d.documentElement.clientWidth,
h: d.documentElement.clientHeight };
// For browsers in Quirks mode
return { w: d.body.clientWidth, h: d.body.clientHeight };
}
除了事实,我不知道为什么行if (document.compatMode == "CSS1Compat")
不if (d.compatMode == "CSS1Compat")
,一切都看起来不错。
documentElement.clientWidth
对iOS上的设备方向更改不响应。b)显示物理像素数(实际上无用),而不是虚拟像素
如果您正在寻找能够在mobile上以虚拟像素提供正确值的非jQuery解决方案,并且您认为简单window.innerHeight
或document.documentElement.clientHeight
可以解决您的问题,请首先研究此链接: https //tripleodeon.com/assets/2011/12/ table.html
开发人员已进行了良好的测试,揭示了该问题:您可以为Android / iOS,横向/纵向,正常/高密度显示器获得意外的值。
我当前的答案还不是灵丹妙药(// todo),而是警告那些即将从该线程中将给定解决方案快速复制粘贴到生产代码中的人。
我一直在寻找移动设备上虚拟像素的页面宽度,但发现唯一有效的代码是(出乎意料!)window.outerWidth
。稍后,我将在有空的时候检查此表以获取给出正确解决方案的解决方案,该解决方案可提供高度(导航栏除外)。
此代码来自http://andylangton.co.uk/articles/javascript/get-viewport-size-javascript/
function viewport() {
var e = window, a = 'inner';
if (!('innerWidth' in window )) {
a = 'client';
e = document.documentElement || document.body;
}
return { width : e[ a+'Width' ] , height : e[ a+'Height' ] };
}
注意:要读取宽度,请使用 console.log('viewport width'+viewport().width);
window.innerHeight
和之间有区别document.documentElement.clientHeight
。第一个包括水平滚动条的高度。
符合W3C标准的解决方案是创建一个透明的div(例如,使用JavaScript动态创建),将其宽度和高度设置为100vw / 100vh(视口单位),然后获取其offsetWidth和offsetHeight。之后,可以再次删除该元素。这在较旧的浏览器中将不起作用,因为视口单位是相对较新的,但是如果您不在乎它们,而只是在乎(即将成为)标准,那么您绝对可以这样:
var objNode = document.createElement("div");
objNode.style.width = "100vw";
objNode.style.height = "100vh";
document.body.appendChild(objNode);
var intViewportWidth = objNode.offsetWidth;
var intViewportHeight = objNode.offsetHeight;
document.body.removeChild(objNode);
当然,您也可以设置objNode.style.position =“ fixed”,然后使用100%作为宽度/高度-这应该具有相同的效果,并在一定程度上提高兼容性。同样,将位置设置为fixed可能通常是个好主意,因为否则div将是不可见的,但会占用一些空间,这将导致滚动条出现等。
这是我做的方法,我在IE 8-> 10,FF 35,Chrome 40中尝试过,它将在所有现代浏览器(定义window.innerWidth)和IE 8(无窗口)中都非常流畅。 innerWidth)以及任何问题(例如由于溢出而闪烁:“隐藏”)都可以顺利运行,请进行报告。我对视口高度不真正感兴趣,因为我做了此功能只是为了解决一些响应工具,但它可能已实现。希望能有所帮助,我感谢您的评论和建议。
function viewportWidth () {
if (window.innerWidth) return window.innerWidth;
var
doc = document,
html = doc && doc.documentElement,
body = doc && (doc.body || doc.getElementsByTagName("body")[0]),
getWidth = function (elm) {
if (!elm) return 0;
var setOverflow = function (style, value) {
var oldValue = style.overflow;
style.overflow = value;
return oldValue || "";
}, style = elm.style, oldValue = setOverflow(style, "hidden"), width = elm.clientWidth || 0;
setOverflow(style, oldValue);
return width;
};
return Math.max(
getWidth(html),
getWidth(body)
);
}