理清window和document的区别以及两者的宽高

一、window和document的区别是什么?

  • window
    1.window对象表示浏览器中打开的窗口。
    2.window对象可以省略,如:
    alert() 等价于 window.alert()
  • document
    1.document对象是window对象的一部分。如:
    document.body 等价于 window.document.body
    2.浏览器的html文档成为document对象。

二、window.location和document.location一样吗?

  • window对象的location属性引用的是location对象,表示该窗口中当前显示文档的URL。
  • document对象的location属性也是引用了location对象。
  • 因此
    window.location === document.location //true
    location.herf === window.location.href === document.location.href

三、与window相关的宽高(不考虑window.document的情况下)

  1. window.innerWidth(打开窗口的内部宽度)与window.outerWidth(打开窗口的外部宽度)


    两者在此表示一样的值
  2. window.innerHeight(打开窗口的内部高度)与window.outerHeight(打开窗口的外部高度)


    window的内高与外高

    3.window.screen包含有关用户屏幕的信息

  • window.screen.height(整个屏幕的高。。固定值)
  • window.screen.width(整个屏幕的宽。。固定值)
  • window.screen.availHeight(可利用的高,即不包括浏览器Google属性栏。。固定值)
  • window.screen.availWidth(可利用的宽,与window.screen.width是一样的。。固定值)
  • window.screenTop(浏览器顶部距屏幕顶部的距离。。随浏览器的缩放以及位置决定)
  • window.screenLeft(浏览器左侧距屏幕左侧的距离。。随浏览器的缩放以及位置决定)
window.screen.height与window.screen.availHeight

四、与document相关的宽高(以document.body为例)

1. 与client相关的宽高
  • document.body.clientWidth
  • document.body.clientHeight
  • document.body.clientTop
  • document.body.clientLeft

clientWidth与clientHeight
1> 该属性指的是元素的可视部分宽度和高度,即padding + content。
2> 如果没有滚动条,即为元素设定的高度和宽度。
3> 如果出现滚动条,那么滚动条会遮盖元素的宽高,那么该属性就是其本来宽高减去滚动条的宽高。(注意:mac系统下滚动轴不占宽度)
总结:
假如无padding无滚动:clientWidth = style.width
假如有padding无滚动:clientWidth = style.width + style.padding*2 
假如有padding有滚动,并且滚动轴是显示的:clientWidth = style.width+style.padding*2 - 滚动轴宽度

clientTop和clientLeft
这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位该元素,它的值就是0.
总结:
这一对属性是用来读取元素的border的宽度和高度的。
clientTop = border-top的border-width(边框像素)
clientLeft = border-left的border-widrh(边框像素)

2. 与offset相关的宽高
  • document.body.offsetWidth
  • document.body.offsetHeight
  • document.body.offsetTop
  • document.body.offsetLeft

offsetWidth与offsetHeight
1> 这一对属性指的是元素的border + padding + content的宽度和高度。
2> 该属性和其内部的内容是否超出元素大小无关,只和本来设定的border以及width和height有关。
总结:
假如无padding 无滚动 无border:offsetWidth = clientWidth = style.width
假如有padding 无滚动 有border:offsetWidth = style.width+style.padding·2 + (border-width)·2 或者 offsetWidth = clientWidth + (border-width)·2
假如有padding 有滚动 有border:offsetWidth = style.width+style.padding·2 + (border-width)·2 或者 offsetWidth = clientWidth +滚动轴宽度 + (border-width)·2

offsetLeft与offsetTop

  • 首先先要了解offsetParent这个属性:

1> 如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。
2> 如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。

  • 这两个属性对于浏览器的兼容问题:
兼容性

对照上面的公式,下面的例子可帮助深入理解:


3. 与scroll相关的宽高
  • document.body.scrollWidth
  • document.body.scrollHeight
  • document.body.scrollTop
  • document.body.scrolleft

scrollWidth 与 scrollHeight
注意:document.body的scrollWidth和scrollHeight 与 div中scrollWidth和scrollHeight是有点区别的。
<1> document.body的scrollWidth和scrollHeight

  • 给定宽高小于浏览器窗口
    1.scrollWidth通常是浏览器窗口的宽度
    2.scrollHeight通常是浏览器窗口的高度
  • 给定宽高大于浏览器窗口,且内容小于给定宽高(有border需乘2)
    1.scrollWidth:给定的宽度 + 其所有的padding、margin和border
    2.scrollHeight:给定的高度 +其所有的padding、margin和border
  • 给定宽高大于浏览器窗口,且内容大于给定宽高(给定宽高有border不需乘2)
    1.scrollWidth:内容宽度 + 其所有的padding、margin和border
    2.scrollHeight:内容高度 + 其所有的padding、margin和border

<2> div的scrollWidth和scrollHeight

  • 无滚动轴的情况
    scrollWidth = clientWidth = style.width + style.padding · 2
  • 有滚动轴时
    scrollWidth = 实际内容的宽度 + padding · 2
    scrollHeight = 实际内容的高度 + padding · 2

scrollLeft 和 scrollTop(以div为例)
这对属性是可读写的,指的是当元素其中的内容超出其宽高的时候,元素被卷起的宽度和高度。默认都为0 。若改写的话也是可以的改变的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,378评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,356评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,702评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,259评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,263评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,036评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,349评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,979评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,469评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,938评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,059评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,703评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,257评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,262评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,501评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,792评论 2 345

推荐阅读更多精彩内容