基于js中style.width与offsetWidth的区别(详解)


Posted in Javascript onNovember 12, 2017

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

1. 当样式写在行内的时候,如 <div id="box" style="width:100px">时,用 style.width或者offsetWidth都可以获取元素的宽度。

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

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

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

如下面的例子所示:

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

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

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

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

如下面的例子所示:

<script>
      window.onload = function(){
        var box = document.getElementById('box');
        box.style.width = '200px';
        console.log(box.offsetWidth);
        console.log(box.style.width);
        box.offsetWidth = '400px';
        console.log(box.offsetWidth);
        console.log(box.style.width);
      }
    </script>
  </head>
  <body>
    <div id="box" style="width:300px; height: 300px; padding:3px; margin: 2px; border: 1px solid red;"></div>
  </body>

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

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

以上这篇基于js中style.width与offsetWidth的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript实现动态增加删除表格行(兼容IE/FF)
Apr 02 Javascript
jQuery.Validate 使用笔记(jQuery Validation范例 )
Jun 25 Javascript
修改jQuery Validation里默认的验证方法
Feb 14 Javascript
详解AngularJS中的filter过滤器用法
Jan 04 Javascript
js发送短信倒计时的简单实现方法
Sep 08 Javascript
template.js前端模板引擎使用详解
Oct 10 Javascript
浅谈react 同构之样式直出
Nov 07 Javascript
jQuery动态添加元素无法触发绑定事件的解决方法分析
Jan 02 jQuery
浅谈Vue下使用百度地图的简易方法
Mar 23 Javascript
微信小程序授权登录解决方案的代码实例(含未通过授权解决方案)
May 10 Javascript
vue打开子组件弹窗都刷新功能的实现
Sep 21 Javascript
关于React Native使用axios进行网络请求的方法
Aug 02 Javascript
浅谈webpack下的AOP式无侵入注入
Nov 12 #Javascript
JQ图片文件上传之前预览功能的简单实例(分享)
Nov 12 #Javascript
JS实现小球的弹性碰撞效果
Nov 11 #Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 #jQuery
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 #Javascript
JS Input里添加小图标的两种方法
Nov 11 #Javascript
fetch 使用及如何接收JS传值
Nov 11 #Javascript
You might like
用PHP将数据导入到Foxmail的实现代码
2010/09/05 PHP
微信API接口大全
2015/04/15 PHP
php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)
2016/09/23 PHP
JS获取scrollHeight问题想到的标准问题
2007/05/27 Javascript
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
High Performance JavaScript(高性能JavaScript)读书笔记分析
2011/05/05 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
简单时间提示DEMO从0开始一直进行计时
2013/11/19 Javascript
javascript类型转换示例
2014/04/29 Javascript
与Math.pow 相反的函数使用介绍
2014/08/04 Javascript
JQuery中serialize()用法实例分析
2015/02/06 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
用原生js做单页应用
2017/01/17 Javascript
详解babel升级到7.X采坑总结
2019/05/12 Javascript
egg.js的基本使用和调用数据库的方法示例
2019/05/18 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
2019/10/24 Javascript
vue中的.$mount('#app')手动挂载操作
2020/09/02 Javascript
[35:44]2014 DOTA2华西杯精英邀请赛 5 24 iG VS VG
2014/05/26 DOTA
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python的净值数据接口调用示例分享
2016/03/15 Python
python自定义异常实例详解
2017/07/11 Python
Python线程池模块ThreadPoolExecutor用法分析
2018/12/28 Python
详解Python中的测试工具
2019/06/09 Python
Python线程协作threading.Condition实现过程解析
2020/03/12 Python
python绘制高斯曲线
2021/02/19 Python
利用纯html5绘制出来的一款非常漂亮的时钟
2015/01/04 HTML / CSS
学校献爱心活动总结
2014/07/08 职场文书
安全在我心中演讲稿
2014/09/01 职场文书
单位实习鉴定评语
2015/01/04 职场文书
幼儿园小班工作总结2015
2015/04/25 职场文书
高中家长意见怎么写
2015/06/03 职场文书
关于运动会的宣传稿
2015/07/23 职场文书
Go语言并发编程 sync.Once
2021/10/16 Golang
使用javascript解析二维码的三种方式
2021/11/11 Javascript
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS