javascript中的offsetWidth、clientWidth、scrollWidth、width的区别

1,417 阅读1分钟

说明

它们都是Element的属性,表示元素的宽度。

  • scrollWidth: 内容+内边距+溢出尺寸(不包括边框和外边距) ==实际内容
  • offsetWidth: 内容+内边距+边框+滚动条 ==整体,整个控件
  • clientWidth: 内容+内边距(不包括边框和外边距、滚动条) == 可视内容
  • width:内容 == 设置的宽度

javascript与jQuery都有对应的方法获取上述宽度,说明如下:

//先定义一个元素
var divObj=document.getElementById("div");

1.offsetWidth

var divOffsetWidth=divObj.offsetWidth; //包含:元素宽度+内边距+边框
var divOffsetWidth=$(divObj).outerWidth(false);
//false:(包含:元素宽度+内边距+边框),true:(包含:元素宽度+内边距+边框+外边距)

附:高度取值同上

2.clientWidth

var divClientWidth=divObj.clientWidth;//元素宽度+内边距
var divClientWidth=$(divObj).innerWidth();//元素宽度+内边距

附:高度取值同上

3.scrollWidth

var divScrollWidth=divObj.scrollWidth;//元素宽度+内边距+溢出尺寸(如果有的话)
//jquery无此相同的调用

附:高度取值同上

4.width

var divWidth=divObj.style.width;//元素宽度
var divWidth=$(divObj).width();//元素宽度

附:高度取值同上

注意:

  • offsetWidth(offsetHeight)与style.width(style.height)的区别

    offsetWidth返回值不带单位,style.width返回值带单位,如果需要对取得的值进行计算,用offsetWidth比较方便,如果拿到offsetWidth设置style.width的值需要加上单位“px”。

  • style.width/style.height与scrollWidth/scrollHeight是可读写的属性,clientWidth/clientHeight与offsetWidth/offsetHeight是只读属性

  • style.height的值需要事先定义,否则取到的值为空。而且必须要定义在html里,如果定义在css里,style.height的值仍然为空,但元素偏移有效;而offsetWidth则仍能取到。

总结:

  • 1、通过style.width(style.height)或者jQuery的width()、height()可获取设置元素的宽高

  • 2、通过jQuery的innerWidth()、innerHeight()获取不包含边框、不包含外边距的宽度

  • 3、若要获取元素包含边框的宽度,则可通过divObj.offsetWidth/divObj.offsetHeight或jQuery的Width(false)/$(divObj).outerHeight(false)获取

  • 4、通过jQuery的outerWidth(true)、outerHeight(true)获取带外边距的宽度