基于js中style.width与offsetWidth的区别

ゝ一世哀愁。 2022-05-28 23:51 464阅读 0赞

作为一个初学者,经常会遇到在获取某一元素的宽度(高度、top值…)时,到底是用 style.width还是offsetWidth的疑惑。

  1. 当样式写在行内的时候,如
    时,用 style.width或者offsetWidth都可以获取元素的宽度。

但是,当样式写在样式表中时,如 #box{ width: 100px; }, 此时只能用offsetWidth来获取元素的宽度,而style.width所返回的值为空。

2. style.width 获取的元素宽度只是div的宽度,不包括border、和padding所占的宽度,且宽度值是带单位px的。

offsetWidth 获取的元素宽度为width+border+padding的值(不包括margin),且返回值只为一个数值,不带单位。

例子1:

  1. <head>
  2. <script>
  3. window.onload = function(){
  4. var box = document.getElementById('box');
  5. console.log(box.style.width);
  6. console.log(box.offsetWidth);
  7. }
  8. </script>
  9. </head>
  10. <body>
  11. <div id="box" style="width:300px; height: 300px; padding:3px; margin: 1px; border: 1px solid red;"></div>
  12. </body>

控制台输出的第一个结果为: 300px

控制台输出的第二个结果为: 308 注:300+ 3x2 +1x2 = 308, 且不带单位

3. style.width 也可以在js中用来设置元素的宽度,而offsetWidth不可以。

再举个栗子:

  1. <script>
  2. window.onload = function(){
  3. var box = document.getElementById('box');
  4. box.style.width = '200px';
  5. console.log(box.offsetWidth);
  6. console.log(box.style.width);
  7. box.offsetWidth = '400px';
  8. console.log(box.offsetWidth);
  9. console.log(box.style.width);
  10. }
  11. </script>
  12. </head>
  13. <body>
  14. <div id="box" style="width:300px; height: 300px; padding:3px; margin: 2px; border: 1px solid red;"></div>
  15. </body>

控制台输出的结果分别为 208 200px 208 200px

也就是说通过style.width 设置宽度成功,而 通过offsetWidth设置宽度失败。

发表评论

表情:
评论列表 (有 0 条评论,464人围观)

还没有评论,来说两句吧...

相关阅读