基于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 相关文章推荐
JQuery Tips(3) 关于$()包装集内元素的改变
Dec 14 Javascript
js列举css中所有图标的实现代码
Jul 04 Javascript
js判断IE浏览器版本过低示例代码
Nov 22 Javascript
jquery 图片缩放拖动的简单实例
Jan 08 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
Mar 03 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
Jun 23 Javascript
Node.js中的事件驱动编程详解
Aug 16 Javascript
JQuery中层次选择器用法实例详解
May 18 Javascript
jQuery的ajax和遍历数组json实例代码
Aug 01 Javascript
vue中v-text / v-html使用实例代码详解
Apr 02 Javascript
jquery中为什么能用$操作
Jun 18 jQuery
jquery简易手风琴插件的封装
Oct 13 jQuery
浅谈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
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
PHP会话控制:Session与Cookie详解
2014/09/27 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
基于jquery的地址栏射击游戏代码
2011/03/10 Javascript
使用滤镜设置透明导致 IE 6/7/8/9 解析异常的解决方法
2011/04/07 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
javascript中clone对象详解
2014/12/03 Javascript
js实现的后台左侧管理菜单代码
2015/09/11 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
jQuery实现响应鼠标事件的图片透明效果【附demo源码下载】
2016/06/16 Javascript
基于JavaScript实现前端文件的断点续传
2016/10/17 Javascript
全面解析node 表单的图片上传
2016/11/21 Javascript
详解vue组件化开发-vuex状态管理库
2017/04/10 Javascript
jQuery实现html table行Tr的复制、删除、计算功能
2017/07/10 jQuery
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
python读取html中指定元素生成excle文件示例
2014/04/03 Python
用Python从零实现贝叶斯分类器的机器学习的教程
2015/03/31 Python
玩转python爬虫之cookie使用方法
2016/02/17 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
详解python while 函数及while和for的区别
2018/09/07 Python
Python 忽略warning的输出方法
2018/10/18 Python
用python爬取租房网站信息的代码
2018/12/14 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
2019/06/27 Python
python文件和文件夹复制函数
2020/02/07 Python
python中的测试框架
2020/11/13 Python
研究生求职推荐信范文
2013/11/30 职场文书
大学生作弊检讨书
2014/02/19 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
2014年工程师工作总结
2014/11/25 职场文书
保护校园环境倡议书
2015/04/28 职场文书
2016年元旦寄语
2015/08/17 职场文书
使用goaccess分析nginx日志的详细方法
2021/07/09 Servers
Python多线程实用方法以及共享变量资源竞争问题
2022/04/12 Python