注:(scrollHeight、offsetHeight、clientHeight 同样可按本文去理解。)
这是一个很复杂的问题,让我们想像一下:
- document.documentElement.scrollWidth
- document.documentElement.offsetWidth
- document.documentElement.clientWidth
- document.body.scrollWidth
- document.body.offsetWidth
- document.body.clientWidth
有 6 个属性要测,这 6 个属性要放在 4 种情况中:
- 没有指定 DOCTYPE,网页内容没有超过窗口宽度;
- 没有指定 DOCTYPE,网页内容超过窗口宽度;
- 指定 DOCTYPE,网页内容没有超过窗口宽度;
- 指定 DOCTYPE,网页内容超过窗口宽度;
然后这 4 种情况要放到几个主流浏览器中,假设只有 3 种浏览器:
算一下,6 * 4 * 3,有 72 种情况要测试,天啊。并且不要指望 Firefox 和 Chrome 结果是一样的,不要指望 Firefox 不会出现让您费解的结果,所以这真是一件恼火的事。
从应用入手简化分析
72 种测试情况确实很恼火,但我们回过头来一想,我们到底想要什么?
我认为我们想要两个东西:
- 一是 scrollWidth(scrollHeight),虽然它用处不大,但应该比 offsetWidth(offsetHeight)有用得多。它表示的是文档区的宽度(高度),比如一个网页,特别是门户网站,拖很长,就要把没有显示出来的内容都计算进去。
- 二是视口 viewport,就是 clientWidth,就是窗口中可显示内容的那块区域,就是我们常常看到页面上飞行广告,飞来飞去,碰到边边要反弹的那一块。
测试结果
结果很复杂,就不说了,这里只说实际中怎么使用:
- 要使用 scrollWidth,取 document.documentElement.scrollWidth 与 document.body.scrollWidth 的最大值;
- 要使用 clientWidth,如果 document.documentElement.clientWidth > 0,则使用 document.documentElement.clientWidth,否则使用 document.body.clientWidth。
表达式为:
- var scrollWidth = Math.max(document.documentElement.scrollWidth, document.body.scrollWidth);
- var clientWidth = document.documentElement.clientWidth || document.body.clientWidth;
(补充:clientWidth 在框架页面frameset有问题, 在非标准页面获得的document.documentElement.clientWidth 为整个框架的高度 )
分享到:
相关推荐
- **document.body.clientWidth**: 表示网页可见区域的宽度(不包含滚动条)。 - **document.body.clientHeight**: 表示网页可见区域的高度(不包含滚动条)。 - **document.body.offsetWidth**: 包含边框在内的网页...
1. `document.body.clientWidth` 和 `document.body.clientHeight` 也分别返回BODY元素的宽度和高度,与IE相同。 2. 不同的是,`document.documentElement.clientWidth` 和 `document.documentElement.clientHeight`...
例如,在Internet Explorer 6(以及更低版本)中,当页面内容超出窗口显示范围时,`document.body` 的 `scrollWidth`、`clientWidth` 和 `offsetWidth` 属性都会返回内容的实际宽度,而不是可视区域的宽度。这与其他...
scrW = document.body.scrollWidth; scrH = document.body.scrollHeight; } else if(document.body) { // IE Mac scrW = document.body.offsetWidth; scrH = document.body.offsetHeight; } var...
- `document.body.clientWidth` 和 `document.body.clientHeight` 同样返回BODY对象的宽度和高度。 - `document.documentElement.clientWidth` 和 `document.documentElement.clientHeight` 返回的是包含边距的页面...
但需要注意的是,对于IE5.5及更高版本,需要特别处理`document.body.scrollLeft`和`document.documentElement.scrollLeft`,以及`document.body.scrollTop`和`document.documentElement.scrollTop`,以确保在所有...
综上所述,理解`document.body`和`document.documentElement`以及它们与`document.compatMode`的关系,能够帮助开发者更好地处理浏览器兼容性问题,特别是涉及到CSS布局和页面尺寸计算时。同时,熟悉各种尺寸属性和...
s += " 网页可见区域宽:"+ document.body.offsetWidth + " (包括边线和滚动条的宽)"+"\n"; // ... return s; } ``` 这个函数可以获取浏览器的宽度和高度,并将其显示在页面上。 获取当前页面的可视高度和宽度...
- **`document.body.clientWidth`** 和 **`document.body.clientHeight`**:这两个属性分别表示文档体的宽度和高度,不包含边框和滚动条。 - **`document.body.offsetWidth`** 和 **`document.body.offsetHeight`**...
- `document.body.offsetWidth` 和 `document.body.offsetHeight` 分别表示网页可见区域的宽度和高度,包括了边线的宽度。 #### 定位相关的属性 对于精确定位的需求,JavaScript还提供了一系列属性来帮助开发者更...
xScroll = document.body.offsetWidth; } var windowWidth; // 获取视口宽度 if (self.innerWidth) { // 除了IE外的所有浏览器 windowWidth = self.innerWidth; } else if (document.documentElement && ...
- 另外,`document.body.offsetWidth` 和 `document.body.offsetHeight` 也可以获取文档的宽度和高度,但通常只适用于HTML文档的body部分,可能不包括其他非body元素的尺寸。 - 对于动态加载或滚动的内容,可能...
- `document.body.offsetWidth` 和 `document.body.offsetHeight`: 这两个属性返回`<body>`元素的总宽度和高度,包括边框。它们可以用于获取浏览器实际显示的页面内容宽度和高度,包括边框。 - `window....
xScroll = document.body.offsetWidth; yScroll = document.body.offsetHeight; } var windowWidth, windowHeight; if (self.innerHeight) { windowWidth = self.innerWidth; windowHeight = self....
- `document.body.clientWidth`: 只包含内容区域的宽度,不包括滚动条和边框。 - `document.body.clientHeight`: 只包含内容区域的高度,不包括滚动条和边框。 - `document.body.offsetWidth`: 包括内容、内边距...
- **`document.body.offsetWidth`**: 返回 BODY 元素的实际宽度,包括边框和内边距。 - **`document.body.offsetHeight`**: 返回 BODY 元素的实际高度,包括边框和内边距。 - **`document.body.scrollWidth`**: 返回...
`document.body` 的一些属性(如 `clientHeight`, `clientWidth`, `offsetWidth`, `offsetHeight`, `scrollWidth`, `scrollHeight`, `scrollTop`, 和 `scrollLeft`)会被重新分配给 `document.documentElement`。...
document.body.clientWidth – 网页可见区域宽 document.body.clientHeight – 网页可见区域高 document.body.offsetWidth – 网页可见区域宽,包括边线和滚动条的宽 document.body.offsetHeight – 网页可见区域高...
var w = document.documentElement.clientWidth || document.body.clientWidth; var h = document.documentElement.clientHeight || document.body.clientHeight; ``` 2. **`offsetHeight` 和 `offsetWidth`** ...