【HTML】- js宽高的理解

js中有涉及各种各样的宽和高,如window下、document下、event下的,在使用过程中容易混淆,做一下总结。

1.和window相关的宽高

window.innerWidth 内部宽

window.innerHeight 内部高

window.outWidth 外部宽

window.outHeight 外部高

window.innerWidth和window.innerHeight是浏览器可视区域的宽高

window.outWidth window.outHeight 是浏览器的总宽高,宽高包括滚动条

window.screen.height 屏幕高

window.screen.width 屏幕宽

2.和document相关的宽高

2.1 与client相关的宽高

获得可视区域的宽高:document.body.clientHeight || document.documentElement.clientHeight || window.innerHeight

2.1.1 clientWidth和clientHeight

document.body.clientWidth和document.body.clientHeight指的是可见区域的宽高,及content+padding。

如果无padding无滚动,即为元素设定的宽度和高度 clientWidth =  style.width;

如果有padding无滚动clientWidth =  style.width + style.padding*2;

如果有padding有滚动条,因为滚动条会遮盖元素的宽高 ,那么该属性就是其本身宽高减去滚动条的宽高 clientWidth = style.width +  style.padding*2 - 滚动轴宽度。

2.1.2 clientLeft和clientWidth

document.body.clientLeft document.body.clientTop 这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位该元素,值为0;clientLeft和 clientTop 是用来读取元素的border的宽高 clientTop = border-top的border-width。

2.2 与offset相关的宽高

2.2.1 offsetWidth和offsetHeight

document.body.offsetWidth document.body.offsetHeight
 这一属性指的是元素的border + padding + content的宽度和高度;该属性和其内部的显示内容是否超出元素大小无关,只和本身设定的border以及width和height有 关。

假如无padding无滚动无border offsetWidth = clientWidth = style.width;

假如有滚动条,有padding,有border offsetWidth = style.width +   style.padding*2 + (border-width)*2 = clientWidth + 滚动轴宽度 +
 (border-width)*2

假如有padding无滚动有border offsetWidth = style.width  +  style.padding*2 + (border-width)*2 = clientWidth + (border-width)*2

2.2.2 offsetLeft和offsetTop

document.body.offsetLeft document.body.offsetTop

如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),  offsetParent为body

如果当前元素的父级元素中有CSS定位(position为absolute或relative),  offsetParent取最近的那个父元素

在IE6/7中:offsetLeft = (offsetParent的padding-left) + (当前元素的margin-left)

在IE8/9/10中及Chrome中:offsetLeft = (offsetParent的margin-left) +

(offsetParent的border的宽度)+ (offsetParent的padding-left) + (当前元素  的margin-left)

在FireFox中:offsetLeft = (offsetParent的margin-left)  + (offsetParent的padding-left) + (当前元素的margin-left)

2.3 与scroll相关的宽高

2.3.1 scrollHeight和scrollWidth

body中:document.body.scrollWidth document.body.scrollHeight
 document.body的scrollWidth和scrollHeight与div的scrollWidth和scrollHeight是有点区别的。

当给定的宽高小于浏览器的窗口时,scrollWidth通常是浏览器的宽高,   scrollHeight通常是浏览器的高度。

当给定高大于浏览器的窗口时,且内容小于给定宽高时,scrollWidth给定的宽  + 其所有的padding、margin、和border,scrollHeight给定的高 + 其所有 的   padding、margin、和border

当给定宽高大于浏览器窗口,且内容大于给定宽高scrollWidth内容宽高时,其  scrollWidth = scrollWidth内容的宽 + 其所有的padding、margin、和border
 scrollHeight = scrollHeight内容的高 + 其所有 的  padding、margin、和border

div中:

在无滚动轴情况下 :scrollWidth = clientWidth + style.padding*2

在有滚动轴情况下:scrollWidth = 是实际内容的宽度 + padding*2

2.3.2 scrollLeft和scrollTop

document.body.scrollLeft document.body.scrollTop
 这对属性是可读写的,指的是当元素其中的内容超出宽高的时候,元素被卷起的宽度 和高度。

3.和event相关的宽高

clientX和clientY 相对于浏览器(可视区域左上角0,0)的坐标

screenX和screenY 相对于设备屏幕左上角(0,0)的坐标

offsetX和offsetY 相对于事件源左上角(0,0)的坐标

pageX和pageY 相对于网页(0,0)左上角

X和Y 本是IE属性,相对于CSS动态定位的最内层包容元素


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值