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 相关文章推荐
sina的lightbox效果。
Jan 09 Javascript
JS 用6N±1法求素数 实例教程
Oct 20 Javascript
JavaScript获取某年某月的最后一天附截图
Jun 23 Javascript
JavaScript操作Cookie详解
Feb 28 Javascript
JavaScript禁止用户多次提交的两种方法
Jul 24 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
Javascript中八种遍历方法的执行速度深度对比
Apr 25 Javascript
纯原生js实现贪吃蛇游戏
Apr 16 Javascript
Easyui在treegrid添加控件的实现方法
Jun 23 Javascript
利用JavaScript实现栈的数据结构示例代码
Aug 02 Javascript
laravel5.4+vue+element简单搭建的示例代码
Aug 29 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 Javascript
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
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
CI框架入门示例之数据库取数据完整实现方法
2014/11/05 PHP
PHP生成条形图的方法
2014/12/10 PHP
php创建多级目录的方法
2015/03/24 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
Javascript 对象的解释
2008/11/24 Javascript
JavaScript中按位“异或”运算符使用介绍
2014/03/14 Javascript
AngularJS表单详解及示例代码
2016/08/17 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
vue操作下拉选择器获取选择的数据的id方法
2018/08/24 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
vuex存值与取值的实例
2019/11/06 Javascript
python socket网络编程步骤详解(socket套接字使用)
2013/12/06 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
Python使用装饰器进行django开发实例代码
2018/02/06 Python
TensorFlow 滑动平均的示例代码
2018/06/19 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
Python turtle库绘制菱形的3种方式小结
2019/11/23 Python
Python面向对象之继承原理与用法案例分析
2019/12/31 Python
Python中Selenium库使用教程详解
2020/07/23 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
用CSS3和table标签实现一个圆形轨迹的动画的示例代码
2019/01/17 HTML / CSS
小程序canvas中文字设置居中锚点
2019/04/16 HTML / CSS
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
英国排名第一的在线宠物用品商店:Monster Pet Supplies
2018/05/20 全球购物
Shop Apotheke瑞士:您的健康与美容网上商店
2019/10/09 全球购物
25岁生日感言
2014/01/13 职场文书
记帐员岗位责任制
2014/02/08 职场文书
项目建议书范文
2014/05/12 职场文书
平遥古城导游词
2015/02/03 职场文书
2016年秋季新学期致辞
2015/07/30 职场文书
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL