这该死的高度,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()方法添加…

瓦尔都窗前的一瞥 ①

面对着围着哥本哈根的、生满了绿草的城堡&#xff0c;是一幢高大的红房子。它的窗子很多&#xff0c;窗子上种着许多凤仙花和青蒿一类的植物。房子内部是一副穷相&#xff1b;里边住的也全是一些穷苦的老人。这就是“瓦尔都养老院”。  看吧&#xff01;一位老倚着窗槛站着&a…

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

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

qsort和sort的区别 转载

qsort和sort的区别 First qsort 基本快速排序的方法&#xff0c;每次把数组分成两分和中间的一个划分值&#xff0c;而对于有多个重复值的数组来说&#xff0c;基本排序的效率较低。集成在C语言库函数里面的的qsort函数&#xff0c;使用 三 路划分的方法解决这个问题。所谓三路…

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

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

RIA说文解字

微软 WPF/Sliverlight Adobe AIR&#xff08;Adobe Integrated Runtime&#xff09; Java JavaFX 三种主流RIA开发平台评测报告 评测对象为Adobe Flex&#xff0c;微软的ASP.Net AJAX和Curl RIA平台。 测试发现&#xff0c;ASP.Net AJAX尤其适合B2C也即商家对消费者&#xff08…

酒桌游戏

酒桌游戏 酒桌上&#xff0c;敬酒是比较通俗的方式&#xff0c;但是敬酒就会产生 求人与被求人 的关系。同是同学。可能还是游戏的方式放松些~ 抽手游戏 大家把手伸出来&#xff0c;数1&#xff0c;2&#xff0c;3~~~ 最后一个人&#xff0c;喝酒 两人同叫&#xff0c;两人喝酒…

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

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

由Dvbbs PHP 0day引发的争论

由Dvbbs PHP 0day引发的争论昨天刚刚得到Dvbbs PHP 0day 的资料&#xff0c;看来还是晚了&#xff0c;今天无意间发现了有趣的事情&#xff0c;所以就给大家贴出来。呵呵漏洞给大家播报下Dvbbs PHP 0day影响版本&#xff1a;2.0漏洞文件&#xff1a;/boardrule.phpAuthor&#…

图形学中的 显示表示 和 隐式表示

简介 The two most common methods of representing curves and surfaces in geometric modeling are implicit equations and parametric functions.// 两个最基础的方法在表示曲面和形状在几何建模是隐式表示和显示表示 隐式表示 The implicit equation of a curve lying in …

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; 但必须保证选择的这一行或这一…

做返回功能的醒悟

以前做返回是先取得跳转到本页面的地址&#xff08;后台方法 Request.ServerVariables["HTTP_REFERER"] 还可以是Request.UrlReferrer等&#xff09;&#xff0c;然后再跳转到原页面作返回功能今天遇外发现JS有个方法javascript:history.back(1);&#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即可

OCP-052考试题库汇总(32)-CUUG内部解答版

Which state must a database be to enable ARCHIVELOG ? A)NOMOUNT B)OPEN IN READ WRITE mode C)OPEN IN READ ONLY mode D)OPEN IN RESTRICTED mode E)MOUNT Answer: E 赵&#xff1a; 题译&#xff1a;数据库必须是哪个状态才能启用 ARCHIVELOG? oracle 启动分为三步&…

微软推中文Live地图搜索服务与Office集成

2008年1月15日&#xff0c;微软MSN在北京宣布正式推出中文版Live地图搜索。Live地图搜索基于微软Virtual Earth技术&#xff0c;目前涵盖中国114个城市信息&#xff0c;并推出为中国市场特别研发的公交换乘线路查询。 现在是进入的最好时期随着城市基础设施建设不断发展&#x…

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

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

AD中的五种角色

AD五种操作主机的作用<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />Active Directory 定义了五种操作主机角色&#xff08;又称&#xff26;&#xff33;&#xff2d;&#xff2f;&#xff09;&#xff1a; 1.架构主机 schema…

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

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