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. iOS打包(ipa包) – liguangsunls

    iOS打包(ipa包) 1、打开XCode打开project文件。选择Product,再点击Archive。 […]...

  2. 【十五分钟Talkshow】工作流及工作流框架、服务 – 陈希章

    【十五分钟Talkshow】工作流及工作流框架、服务 内容摘要 这里用四讲的内容,给大家介绍了工作流(微软平台 […]...

  3. 【转载】【重要】Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结 – 李玉龙

    【转载】【重要】Ubuntu Linux 下 Ffmpeg 及 Mencoder 安装使用小结 近段时间在学习 […]...

  4. [新年快乐推荐] 如何在科学上获得成功 – Welfare

    [新年快乐推荐] 如何在科学上获得成功 Practical Hints for Success in Scie […]...

  5. 初学者必读 PHP常用开发工具分析 – 圣者

    初学者必读 PHP常用开发工具分析 简介:这是初学者必读 PHP常用开发工具分析的详细页面,介绍了和php,有 […]...

  6. 并发之CountDownLatch用法详解 – 五色风车

    并发之CountDownLatch用法详解 概念        CountDownLatch 是一个同步工具类 […]...

  7. ppt图片在word中不能正常显示,只显示为矩形框的解决方法 – 坚强地活着

    ppt图片在word中不能正常显示,只显示为矩形框的解决方法 word中插入的其他图片是好的,但是从ppt复制 […]...

  8. Linux + .net core 开发升讯威在线客服系统:首个经过实际验证的高性能版本

    我把这款业余时间写的小系统丢在网上,陆续有人找我要私有化版本,我都给了,毕竟软件业的初衷就是免费和分享,后来我 […]...

随机推荐

  1. 熵、联和熵与条件熵、交叉熵与相对熵是什么呢?详细解读这里有!

    熵是一个很常见的名词,在物理上有重要的评估意义,自然语言处理的预备知识中,熵作为信息论的基本和重点知识,在这里 […]...

  2. 代码注释规范-IDEA 配置 Java 类方法注释模板

    团队开发时,业务模块分配的越清晰,代码注释管理越完善,越有利于后面维护,后面再管理也方便不少。另外也起着 […]...

  3. 痞子衡嵌入式:在i.MXRT启动头FDCB里调整Flash工作频率也需同步设Dummy Cycle

      大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是Flash工作频率与Dummy Cycle […]...

  4. Redis分布式锁的try-with-resources实现

    Redis分布式锁的try-with-resources实现 一、简介 在当今这个时代,单体应用(standa […]...

  5. python利用jieba分词之后用echarts实现词云 没有实现前后端的数据交互

    直接贴代码: <!DOCTYPE html> <html lang="en"> < […]...

  6. 服务设计要解决的问题

      前几天和同事聊天,同事说:   “业务的服务(相对于我们基础架构这边的底层技术)在技术上就需要解决三个问题 […]...

  7. 全国344个主要城市(县)地图

    原文地址:http://echarts.baidu.com/echarts2/doc/example/map2 […]...

  8. 深度学习(Deep Learning)资料大全(不断更新)

    新增深度学习文本、图片、语音数据集 Deep Learning(深度学习)学习笔记(不断更新): Deep L […]...

展开目录

目录导航