基于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限制文本框输入值类型的方法
May 07 Javascript
js+css实现的圆角边框TAB选项卡滑动门代码分享(2款)
Aug 26 Javascript
学习javascript面向对象 理解javascript对象
Jan 04 Javascript
jQuery插件实现文件上传功能(支持拖拽)
Aug 27 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
简单实现js上传文件功能
Aug 21 Javascript
Vue0.1的过滤代码如何添加到Vue2.0直接使用
Aug 23 Javascript
vue组件学习教程
Sep 09 Javascript
20170918 前端开发周报之JS前端开发必看
Sep 18 Javascript
Jquery的Ajax技术使用方法
Jan 21 jQuery
node.js中stream流中可读流和可写流的实现与使用方法实例分析
Feb 13 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
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP OPCode缓存 APC详细介绍
2010/10/12 PHP
php教程之phpize使用方法
2014/02/12 PHP
YiiFramework入门知识点总结(图文教程)
2015/12/28 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
读jQuery之八 包装事件对象
2011/06/21 Javascript
Jquery 跨域访问 Lightswitch OData Service的方法
2013/09/11 Javascript
seaJs的模块定义和模块加载浅析
2014/06/06 Javascript
javascript实现带节日和农历的日历特效
2015/02/01 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
vue更改数组中的值实例代码详解
2020/02/07 Javascript
Vue 实现可视化拖拽页面编辑器
2021/02/01 Vue.js
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python中装饰器的一个妙用
2015/02/08 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
基于python实现高速视频传输程序
2019/05/05 Python
python利用tkinter实现屏保
2019/07/30 Python
python编程进阶之类和对象用法实例分析
2020/02/21 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
2020/09/15 Python
阿里巴巴英国:Alibaba英国
2019/12/11 全球购物
C语言中一个结构不能包含指向自己的指针吗
2012/05/25 面试题
消防安全管理制度
2014/02/01 职场文书
三查三看党性分析材料
2014/02/18 职场文书
酒店管理毕业生自荐信
2014/05/25 职场文书
幼儿教师辞职信范文
2015/03/02 职场文书
大学副班长竞选稿
2015/11/21 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server