clientWidth、offsetWidth、scrollWidth的区别 - guo&qi

gg-qq 2021-08-09 原文


clientWidth、offsetWidth、scrollWidth的区别


一、概念

  它们都是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)

 

posted on
2021-01-24 20:35 
guo&qi 
阅读(111
评论(0
编辑 
收藏 
举报

 

版权声明:本文为gg-qq原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/gg-qq/p/14309110.html

clientWidth、offsetWidth、scrollWidth的区别 - guo&qi的更多相关文章

  1. html打造动画【系列2】- 可爱的蛙蛙表情 – 狙击手+

    html打造动画【系列2】- 可爱的蛙蛙表情 可爱的小青蛙,一定想不到 先感受一下全部表情包: 在开始之前先安 […]...

  2. github上传自己的开源代码 – limingyue

    github上传自己的开源代码 之前曾用Github上传过自己的代码,但是一个很繁琐的过程,后来就没有持续的开 […]...

  3. linux下常用命令查看端口占用 – pretty_田纳西

    linux下常用命令查看端口占用 在linux使用过程中,需要了解当前系统开放了哪些端口,并且要查看开放这些端 […]...

  4. oracle创建数据库和用户 – 癫狂编程

    oracle创建数据库和用户   以前开发的时候用得比较多的是mysql和sql server,oracle用 […]...

  5. kingston DataTraveler G2 4G U盘量产成功 – IT@民工

    kingston DataTraveler G2 4G U盘量产成功   经过几天努力,终于把我新买优盘量产成 […]...

  6. Elasticsearch原理解析与性能调优 – 谭英智

    Elasticsearch原理解析与性能调优 基本概念 定义 一个分布式的实时文档存储,每个字段 可以被索引与 […]...

  7. 面试经历_记回沈阳两个月稳定过渡期 – 月飘冥

    面试经历_记回沈阳两个月稳定过渡期 沈阳东软医疗 沈阳就东软最有名,东软医疗MS是从东软中独立出来成立子公司的 […]...

  8. 数百个 HT 工业互联网 2D 3D 可视化应用案例分享 – 2019 篇

    继《分享数百个 HT 工业互联网 2D 3D 可视化应用案例》2018 篇,图扑软件定义 2018 为国内工业 […]...

随机推荐

  1. 【解决方案】如何搭建一套完整的工厂安防智能监控系统——EasyCVR实现设备接入与维护

    EasyCVR视频上云网关支持对摄像机进行Onvif PTZ控制;支持对摄像机进行Onvif焦距缩放控制;通过 […]...

  2. CAD:计算三角形的外接圆圆心

    条件:三个定点不共线      ...

  3. Maven详解之仓库——本地仓库、远程仓库 Maven详解之仓库——本地仓库、远程仓库(转)

    Maven详解之仓库——本地仓库、远程仓库 在Maven中,任何一个依赖、插件或者项目 […]...

  4. [JCIP笔记] (一)多线程的起源

    [JCIP笔记] (一)多线程的起源 在很久很久以前,那时的计算机还没有操作系统这种东西,所以只能有一个程序, […]...

  5. Java 从入门到进阶之路(七)

    Java 从入门到进阶之路(七), Java 中的方法重载。 在之前的文章中我们介绍了一下 java 中的对象 […]...

  6. vue iView table中render渲染

    <template> <div class="srm-page"> <el-fo […]...

  7. 设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用

    设计模式在实际业务应用中的介绍之3——外观或门面模式Facade对AOP装配业务工厂的应用 设计模式在实际业务 […]...

  8. JS对浏览器Cookie的操作,查询、设置以及删除

    JavaScript是运行在客户端的脚本,因此一般是不能够设置Session的,因为Session是运行在服务 […]...

展开目录

目录导航