这该死的高度,height,clientHeight,scrollHeight,offsetHeight

引言:

虽然有时候界面的设置不是我们这些后台代码人员的工作,但是有时候却难以理解控件生成时的一些怪事,比方在学习webabcd的扩张GridView中固定列时,你或许已经被其中的height,clientHeight,scrollHeight,offsetheight弄得晕晕的了,当然这些都是网页制作的一个基础,将其记下,避免以后自己混乱掉.

正文:

不管怎样,实践才是检验真理的唯一证据,先引入一段代码:
<body style="border:1px solid red; height:1000px; width:800px">
    
<form id="form1" runat="server">
    
<div style="border:1px solid red; height:500px; width:500px; margin-top:50px; overflow:scroll;" id="test"
           onclick
="justAtest()">
    
<div style="height:600px; float:left; width:220px; overflow:scroll;border:1px solid red " id="test2">
    
<div style="height:700px;" id="test4"></div>
    
</div>
    
<div style="height:550px; float:left; width:250px; border:1px solid red" id="test3"></div>
    
</div>
    
</form>
</body>
运行这段代码的效果图如下(火狐的运行的结果跟IE稍有不同,在火狐中body中的div是靠左的)


在这张效果图中,最大的红色框框是body,中间的带滚动条的红色框框是div(id是test),它里面的左边是div(id是test2),右边是div(id是test3),test1中间放着一个div(id是test4),每个div均设置了高度,宽度,test中还设置了一个与body的外补丁,就在这简单的网页里我们来看看以下的一些属性吧.

我们来实现test中的onclick事件
  function justAtest()
    
{
       var test
= document.getElementById("test");
       var test2
=document.getElementById("test2")
       var test3
=document.getElementById("test3")
       var test4
=document.getElementById("test4");     
       alert(test4.style.height); 
       alert(test3.style.height);    
       alert(test2.style.height)
       alert(test.style.height);      
       alert(document.body.style.height) 
    }

height :其实Height高度跟其他的高度有点不一样,在javascript中它是属于对象的style对象属性中的一个成员,它的值是一个字符类型的,而另外三个高度的值是int类型的,它们是对象的属性.因此这样document.body.height就会提示undenifine,而必须写成document.body.style.height
上面的脚本将依次弹出700px,550px,600px,500px,1000px.height是最简单的了,不必去考虑是否有滚动条及边框等.因此也不做多解释了.
然后我们将脚本换下
    function justAtest()
    
{
       var test
= document.getElementById("test");
       var test2
=document.getElementById("test2")
       var test3
=document.getElementById("test3")
       var test4
=document.getElementById("test4");     
       alert(test4.clientHeight); 
       alert(test3.clientHeight);    
       alert(test2.clientHeight)
       alert(test.clientHeight);      
       alert(document.body.clientHeight) 
    }
运行后火狐的结果为:700,550,583,483,1000
           IE的结果为:700 ,550,583,483,1000
IE与火狐下的运行结果是一致的.下面来看下clientHeight的定义.
clientHeight:可见区域的宽度,不包括boder的宽度,如果区域内带有滚动条,还应该减去横向滚动条不可用的高度,正常的是17px,其实就是滚动条的可滚动的部分了,其实clientHeight与height的高度差不多,如果不带滚动条的话他们的值都是一样的,如果带有滚动条的话就会比height值少17px;火狐与IE下均为一致.
接着我们来看scrollHeight
 function justAtest()
    
{
       var test
= document.getElementById("test");
       var test2
=document.getElementById("test2")
       var test3
=document.getElementById("test3")
       var test4
=document.getElementById("test4");     
       alert(test4.scrollHeight); 
       alert(test3.scrollHeight);    
       alert(test2.scrollHeight)
       alert(test.scrollHeight);      
       alert(document.body.scrollHeight) 
    }
运行后火狐的结果为:700,552,700,602,1002
           IE的结果为: 15, 15 , 700,602, 552
scrollHeight:这个属性就比较麻烦了,因为它们在火狐跟IE下简直差太多了..
在火狐下还很好理解,它其实就是滚动条可滚动的部分还要加上boder的高度还要加上横向滚动条不可用的高度,与clientHeight比起来,多个border的高度跟横向滚动条不可用的高度.

在IE中 scrollHeight确是指这个对象它所包含的对象的高度加上boder的高度和marging,如果它里面没有包含对象或者这个对象的高度值未设置,那么它的值将为15
最后我们来看offsetHeight
    function justAtest()
    
{
       var test
= document.getElementById("test");
       var test2
=document.getElementById("test2")
       var test3
=document.getElementById("test3")
       var test4
=document.getElementById("test4");     
       alert(test4.offsetHeight); 
       alert(test3.offsetHeight);    
       alert(test2.offsetHeight)
       alert(test.offsetHeight);      
       alert(document.body.offsetHeight) 
    }

offsetHeight:
FF:700,552,602,502,1002
IE:700,552,602,502,1002
这个属性好办,因为在测试中IE跟火狐的结果是一样的,均表示是自身的高度,如果有设置boder的话还应该加上boder的值,因为除了test4这个div外,其他的div均有设置border=1px,所以552=550+2,其他的均一样.

嘿嘿,综上所述,clientHeight与height的区别是如果有滚动条时应减去滚动条的17px不可用部分,offsetHeight与Height的区别是增加了boder的高度,ScrollHeihgt与Height的区别是火狐下与offsetHeight一致,IE下如上所述.

相信你了解了这个,对width,clientWidth,scrollWidth,offsetWidth已经不陌生了吧,只不过一个是长一个是宽的问题了.

下一篇:

我理解的top,clientTop,offsetTop,scrollTop

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549697.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C#高级语法基础知识总结6——字符串集合

字符串 集合 列表声明 Var intListnew List<int>();Var racersnew List<Racer>();List<int> intListnew List<int>(10);//大小为10&#xff0c;倍数增加 使用Capacity属性可以获取和设置集合的容量 使用Count属性可以获取集合的元素个数 Add()方法添加…

浏览器播放rtsp视频流方案(vlc转http方案)

一.vlc播放器转成http&#xff0c;在浏览器用video标签播放 1.下载vlc播放器 网址:https://www.videolan.org/ 2.安装并打开之后&#xff0c;点击媒体 3.点击打开网络串流&#xff0c;进入到下个页面&#xff0c;在输入框输入自己的rtsp流 4.点击播放旁边的小三角号&#xff0c…

浏览器播放rtsp视频流方案(ffmpeg + nginx转m3u8)

1.下载ffmpeg &#xff0c;传送门&#xff1a;https://ffmpeg.en.softonic.com/ 2.配置环境变量 右击我的电脑---->点击属性&#xff0c;打开左侧高级系统设置 点击下方的环境变量 在下方系统变量中找到path变量&#xff0c;选中点击下方编辑&#xff0c;别点成删除&#…

浏览器播放rtsp视频流方案(ffmpeg + nginx转rtmp)

之前已经更新vlc和m3u8的方案了&#xff0c;这个是最后一个方案&#xff0c;同时&#xff0c;转rtmp的方案也是我在用的 1.下载ffmpeg &#xff0c;传送门&#xff1a;https://ffmpeg.en.softonic.com/ 2.配置环境变量 右击我的电脑---->点击属性&#xff0c;打开左侧高级…

uniapp+typeScript+vue3.0+vite

最近公司需要开发新版小程序&#xff0c;思考了一下&#xff0c;决定还是用最新的技术进行开发&#xff0c;同时也能锻炼到自己&#xff0c;废话不多说&#xff0c;开搞&#xff1a; 一.首先打开uniapp的官网&#xff1a;uni-app官网 //环境安装 //全局安装vue-cli npm instal…

纪中七日游——总结篇 DAY1AB

DAY 1 B 组 T1 游戏 Description Alice和Bob在玩一个游戏&#xff0c;游戏是在一个N*N的矩阵上进行的&#xff0c;每个格子上都有一个正整数。 当轮到Alice/Bob时&#xff0c;他/她可以选择最后一列或最后一行&#xff0c;并将其删除&#xff0c; 但必须保证选择的这一行或这一…

系列十一(实战)、发送 接收带标签的消息(Java操作RocketMQ)

一、发送 & 接收带标签的消息 1.1、概述 消息的种类纷繁复杂&#xff0c;不同的业务场景需要不同的消息&#xff0c;基于此RocketMQ提供了消息过滤功能&#xff0c;通过Tag或者Key进行区分&#xff0c;本章介绍Tag&#xff0c;我们再往一个Topic里面发送消息的时候&#x…

Comments are not permitted in JSON

用vsCode开发uniappvue3.0TypeeScriptvite项目的时候&#xff0c;打开json文件报错Comments are not permitted in JSON。 解决办法如下&#xff1a; 1.点击右下角 2.输入JSON选择第二个JSON with Comments即可

uni-nav-bar设置height自适应高度

今天拿到ui设计的图之后&#xff0c;发现需要用到自定义navbar 给它设置height的时候&#xff0c;一开始用的iphone X的屏幕&#xff0c;像素单位用的rpx&#xff0c;发现切换到别的屏幕就不对了 然后还是用iphone X的屏幕&#xff0c;像素改成固定的88px&#xff0c;发现有一…

css文本超出容器宽度自动换行及超过行数加省略号...

css文本超过div的宽度时&#xff0c;让它进行自动换行&#xff0c;并且超过div高度时候&#xff0c;在最后一行加省略号... 废话不多说&#xff0c;上代码 display: -webkit-box;overflow: hidden;text-overflow: ellipsis;word-wrap: break-word;white-space: normal !import…

Dubbo+ZooKeeper搭建的简单示例

一、简介 基于Dubbo ZooKeeper实现的分布式架构&#xff0c;调用接口方法就像调用本地方法一样调用远程服务。 来自Dubbo官网的架构图&#xff1a; 节点角色说明 节点角色说明Provider暴露服务的服务提供方Consumer调用远程服务的服务消费方Registry服务注册与发现的注册中心M…

uni-calendar更改打点颜色实现签到和缺勤不同打点颜色效果

1.公司要实现打卡功能&#xff0c;发现uni-calendar插件不支持不同打点颜色的效果&#xff0c;所以就自己改一下源码 下图是公司ui设计师给的图 2.我们打开调试&#xff0c;可以看到红色打点的样式是.uni-calendar-item__weeks-box-circle 3.我们复制下来这个class名&#xff…

分布式 dynamips+dyangen (更新于07.3.30)

更新内容&#xff1a;很多网友都反映用此文方法行不通&#xff0c;现象为&#xff1a;分布在各计算机上的路由器能起来&#xff0c;但互联的端口是Down的&#xff0c;以至于ping 不通。在此特别感谢 flyxj 网友QQ联系到我才引起我的高度注视使问题得到解决&#xff0c;不会再给…

换了坐骑

公司本来发了个DELL D400。好大好沉啊。&#xff08;虽然加了配置&#xff09;所以一直在使用自己的lenovo。今天总算给换了一个别的本本。当然不是新本本啦。不过也不错。毕竟才来还没一年。淘汰给我的那哥们跟我关系不错。他换了新的联想的天逸系列。 也是挺高配的。双核啊。…

C++_练习—继承_构造析构

构造析构 继承与构造析构&#xff1a; 在子类对象构造时&#xff0c;需要调用父类构造函数对其继承得来的成员进行初始化 在子类对象析构时&#xff0c;需要调用父类析构函数对其继承得来的成员进行清理 1 #include <iostream>2 3 using namespace std;4 5 class info1 {…

Vista修改默认字体

装了Vista之后&#xff0c;发现访问很多网站时字体都不好看。根据网上找到的方法&#xff0c;用Windows XP中的宋体替换Vista中的宋体。1.用 Total Commander (或 WinRAR) 进入 Vista 的 Windows\Fonts 文件夹&#xff0c;simsun.ttc 文件重命名。(我在重命名时&#xff0c;遇到…

在 CCR 环境中使用 Exchange 命令行管理程序移动存储组和数据库

作为Exchange管理员或许会遇到需要对Exchange Server存储组和数据库更改存储路径的情况&#xff0c;在常规情况下&#xff0c;更改Exchange Server存储组和数据库的路径一项比较简单的操作&#xff0c;通常在图形界面下经过简单的几步操作即可&#xff0c;路径更改过程数据库会…

C++_练习—多态_证明vptr指针的存在

证明vptr指针的存在 1 // 证明vptr指针的存在2 3 #include <iostream>4 5 using namespace std;6 7 class parent {8 public:9 parent(int a) { 10 this->a a; 11 } 12 13 virtual void pri(void) { 14 cout << "parent &…

NetCore的配置管理(1)

学习NetCore的配置管理&#xff1b; 目录 命令行配置Json文件配置配置文件文本至C#对象实例的映射配置文件热更新总结命令行配置&#xff1a; 打开VS2017,新建NetCore控制台项目&#xff1b; 打开nuget包管理&#xff1b;添加Microsoft.Asp.NetCore.all&#xff0c;或者使用命令…

buffer busy waits

buffer busy waitshttp://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_idNOT&p_id34405.1当会话想要访问缓冲存储器中的数据块&#xff0c;而该数据块正在被其它会话使用时产生buffer busywaits事件。其它会话可能正在从数据文件向缓冲区存…