这该死的高度,height,clientHeight,scrollHeight,offsetHeight
生活随笔
收集整理的這篇文章主要介紹了
这该死的高度,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已經不陌生了吧,只不過一個是長一個是寬的問題了.
下一篇:
雖然有時候界面的設置不是我們這些后臺代碼人員的工作,但是有時候卻難以理解控件生成時的一些怪事,比方在學習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
總結
以上是生活随笔為你收集整理的这该死的高度,height,clientHeight,scrollHeight,offsetHeight的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做返回功能的醒悟
- 下一篇: Castle学习之一:安装与环境设置