JavaScript中clientWidth,offsetWidth,scrollWidth的区别


Posted in Javascript onJanuary 25, 2021

一、概念

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

Element.clientWidth    内容+内边距-滚动条-----不包括边框和外边距  == 可视内容
Element.scrollWidth    内容+内边距+溢出尺寸-----不包括边框和外边距  ==实际内容
Element.offsetWidth   元素的宽度(内容+内边距+边框+滚动条)==整体,整个控件

二、举例

1、仅有横向滚动条的情况

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>测试scrollWidth、clientWidth、offsetWidth</title>
 <style type="text/css">
  body, html {
   margin: 0px;
   padding: 0px;
  }

  #father {
   width: 300px;
   overflow: auto;
   padding: 10px;
   background: rebeccapurple;
   border: 10px solid red;
   margin: 20px;
  }

  #child {
   height: 100px;
   width: 1000px;
   padding: 10px;
   border: 20px solid #ffcc99;
   margin: 30px;
  }
 </style>
</head>
<body>

<div id="father">
 <div id="child"></div>
</div>

<script type="text/javascript">
 var child = document.getElementById("child");
 console.log("child.width:", window.getComputedStyle(child).width); //内容的宽度:1000px
 console.log("child.clientWidth:", child.clientWidth); //内容+内边距-滚动条-----不包括边框和外边距 == 可视内容 1020px
 console.log("child.scrollWidth:", child.scrollWidth); //内容+内边距+溢出尺寸-----不包括边框和外边距 ==实际内容 1020px
 console.log("child.offsetWidth:", child.offsetWidth); //元素的宽度(内容+内边距+边框+滚动条)==整体,整个控件  1060px

 var father = document.getElementById("father");
 console.log("father.width:", window.getComputedStyle(father).width); //内容的宽度:300px
 console.log("father.clientWidth:", father.clientWidth); //内容+内边距-滚动条-----不包括边框和外边距 == 可视内容 320px
 console.log("father.scrollWidth:", father.scrollWidth); //内容+内边距+溢出尺寸-----不包括边框和外边距 ==实际内容 1100px
 console.log("father.offsetWidth:", father.offsetWidth); //元素的宽度(内容+内边距+边框+滚动条)==整体,整个控件  340px
</script>
</body>
</html>

仅有横向滚动条的情况时,父元素收受到子元素宽度的影响,其他比较特别的是scrollWidth。

父元素的scrollWidth是:子元素的content+padding+border+子元素一边的margin+父元素一边的padding。

2、有横向滚动条和竖向滚动条的情况

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>测试scrollWidth、clientWidth、offsetWidth</title>
 <style type="text/css">
  body, html {
   margin: 0px;
   padding: 0px;
  }

  #father {
   height: 50px;
   width: 300px;
   overflow: auto;
   padding: 10px;
   background: rebeccapurple;
   border: 10px solid red;
   margin: 20px;
  }

  #child {
   height: 100px;
   width: 1000px;
   padding: 10px;
   border: 20px solid #ffcc99;
   margin: 30px;
  }
 </style>
</head>
<body>

<div id="father">
 <div id="child"></div>
</div>

<script type="text/javascript">
 var child = document.getElementById("child");
 console.log("child.width:", window.getComputedStyle(child).width); //内容的宽度:1000px
 console.log("child.clientWidth:", child.clientWidth); //内容+内边距-滚动条-----不包括边框和外边距 == 可视内容 1020px
 console.log("child.scrollWidth:", child.scrollWidth); //内容+内边距+溢出尺寸-----不包括边框和外边距 ==实际内容 1020px
 console.log("child.offsetWidth:", child.offsetWidth); //元素的宽度(内容+内边距+边框+滚动条)==整体,整个控件  1060px

 var father = document.getElementById("father");
 console.log("father.width:", window.getComputedStyle(father).width); //内容的宽度:285px
 console.log("father.clientWidth:", father.clientWidth); //内容+内边距-滚动条-----不包括边框和外边距 == 可视内容 305px
 console.log("father.scrollWidth:", father.scrollWidth); //内容+内边距+溢出尺寸-----不包括边框和外边距 ==实际内容 1100px
 console.log("father.offsetWidth:", father.offsetWidth); //元素的宽度(内容+内边距+边框+滚动条)==整体,整个控件  340px
</script>
</body>
</html>

父元素的width为:父元素的content宽度-滚动条的宽度(大约为15px)

父元素的clientWidth为:父元素的content宽度+父元素padding宽度-滚动条宽度(大约为15px)

以上就是Element中clientWidth,offsetWidth,scrollWidth的区别的详细内容,更多关于clientWidth,offsetWidth,scrollWidth的区别的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
js获取系统的根路径实现介绍
Sep 08 Javascript
各种常用的JS函数整理
Oct 25 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
Sep 26 Javascript
asp.net+js实现金额格式化
Feb 27 Javascript
使用jQuery+EasyUI实现CheckBoxTree的级联选中特效
Dec 06 Javascript
基于BootStrap的图片轮播效果展示实例代码
May 23 Javascript
JavaScript实现向select下拉框中添加和删除元素的方法
Mar 07 Javascript
Javascript操作dom对象之select全面解析
Apr 24 Javascript
微信小程序之前台循环数据绑定
Aug 18 Javascript
对于js垃圾回收机制的理解
Sep 14 Javascript
vue2之简易的pc端短信验证码的问题及处理方法
Jun 03 Javascript
基于vuex实现购物车功能
Jan 10 Vue.js
vue keep-alive的简单总结
Jan 25 #Vue.js
JS实现简易日历效果
Jan 25 #Javascript
javascript代码实现简易计算器
Jan 25 #Javascript
js简单粗暴的发布订阅示例代码
Jan 23 #Javascript
JS中循环遍历数组的四种方式总结
Jan 23 #Javascript
vue form表单post请求结合Servlet实现文件上传功能
Jan 22 #Vue.js
原生js实现自定义难度的扫雷游戏
Jan 22 #Javascript
You might like
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
2010/06/21 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
Laravel 5框架学习之路由、控制器和视图简介
2015/04/07 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
Javascript常考语句107条收集
2010/03/09 Javascript
基于JQuery.timer插件实现一个计时器
2010/04/25 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
AngularJS基础 ng-list 指令详解及示例代码
2016/08/02 Javascript
你知道setTimeout是如何运行的吗?
2016/08/16 Javascript
vue中eventbus被多次触发以及踩过的坑
2017/12/02 Javascript
react 实现页面代码分割、按需加载的方法
2018/04/03 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
iView-admin 动态路由问题的解决方法
2018/10/03 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
Vue 2.0双向绑定原理的实现方法
2019/10/23 Javascript
原生javascript单例模式的应用实例分析
2020/02/23 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
javascript实现移动端轮播图
2020/12/09 Javascript
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
python opencv实现图片旋转矩形分割
2018/07/26 Python
网易2016研发工程师编程题 奖学金(python)
2019/06/19 Python
TensorFlow基本的常量、变量和运算操作详解
2020/02/03 Python
Python中常用的os操作汇总
2020/11/05 Python
史上最详细的Python打包成exe文件教程
2021/01/17 Python
后勤主管工作职责
2013/12/07 职场文书
九年级家长会邀请函
2014/01/15 职场文书
酒店经理职责
2014/01/30 职场文书
店长职务说明书
2014/02/04 职场文书
党委班子纠正“四风”问题整改措施
2014/10/28 职场文书
详解Python描述符的工作原理
2021/06/11 Python