這章節,我們來看看如何獲得和計算元素的坐標和他們的位置.
下面畫出了CSS盒子模型:
詳細的可以查看CSS盒子模型說明.https://www.w3.org/TR/CSS22/學習盒子模型的組成是其他知識點的基礎.
我們使用下面的box做演示:
## Introduction The contents.
box是絕對定位的, 有邊框, 內邊界, 外邊界和 滾動條:
#example { position: absolute; width: 300px; height: 200px; left: 160px; top: 160px; padding: 20px; margin: 20px; overflow: auto; border: 25px solid #F0E68C;}
CSS圖片:
CSS width/height
內容區域的大小在padding以內. CSS屬性的設置使用element.style, 獲取用getComputedStyle()/currentStyle. 更詳細的內容, 關注我們后面的文章.
接下來我們學習關于width和height的另外的屬性.
clientWidth/Height
client區域大小: 包含padding的內容區域大小, 但是不包括滾動條.
大小計算如下:
clientWidth = 300(width) + 40(paddings) - 16(scrollbar) = 324
clientHeight = 200(height) + 40(paddings) = 240
在上面的圖片中, CSS width包含了滾動條. 所以不能按實際的300像素來計算. clientWidth才是有效的內容區域.
scrollWidth/Height
內容區域的寬度和高度,包括滾動部分
scrollHeight = 723 :全部高度, 包含滾動的部分
scrollWidth = 324 :全部寬度,包含滾動的部分
scrollWidth/Height 作為 clientWidth/Height 的話, 使用是一樣的 , 但是他們包含滾動區域.
下面代碼改變元素的垂直大小, 顯示所有的內容
element.style.height = element.scrollHeight+ 'px'
scrollTop/scrollLeft
滾動出的部分大小:垂直和水平. 值的單位也是像素.
下面圖說明了一個垂直滾動的盒子的scrollHeight和scrollTop.
scrollLeft/scrollTop 是可寫的
不像另外的屬性, 都是可讀的. scrollLeft/scrollTop是可以被改變的.來改變元素的滾動.
在標準模式中.document的滾動是在document.documentElement下.
offsetWidth/Height
外框盒子的 width/height, 包含Border,不包含margin.
這是外框盒子的樣子.
offsetWidth = 390 : 外框盒子寬度
offsetHeight = 290 : 外框盒子高度
clientTop/Left
盒子外框的client區域的縮進.
換句話說,就是top/left的大小, 單位像素.
clientLeft = 25 : left大小
clientTop = 25 : top大小
從右往左的文檔(阿拉伯語,猶太人), clientLeft屬性也包含右邊的滾動大小
IE<8和IE8兼容模式 : document.documentElement (或者 document.body 在異常模式下) 從文檔的左上角會有一點點改變.沒有邊框, 但是 document.body.clientLeft/clientTop 在這種情況下不等于0 (通常是2).
offsetParent , offsetLeft/Top
屬性offsetLeft和offsetTop反映了一個元素相對于他的offsetParent的相對移動. offsetParent是在布局中的父元素. 比如, 如果一個元素是絕對定位, offsetParent不是他的DOM父元素. 而是一個離他最近的定位的元素(或者body).
offsetParent規則 :
靜態定位: 最近的表格單元格或者BODY(標準模式下)
定位的其他模式: 最近的定位元素
看不見的元素
JavaScript的坐標和尺寸設置僅為連接和顯示元素
他們值等于0的元素, display:none或者DOM以外的. offsetParent是為null的.
如果一個元素隱藏, 我們可以使用下面的做檢查:
function isHidden(elem)
return !elem.offsetWidth && !elem.offsetHeight
}
如果父元素是display:none, 執行正常.
除了TR元素執行正常, 在某些瀏覽器重,TR會有BUG. 但是我們通常是檢查另外的元素, 所以使用正常
如果元素是visibility:hidden或者定位off-screen, 這樣檢查就失效了. 空元素同樣也被隱藏.
屬性說明:
clientWidth/clientHeight - 在border里的區域, client區域包含padding,但不包含滾動區域.
clientLeft/clientTop - left/top大小或者說, 盒子左上角的client區域的移動. IE在也是一樣, 因為document.body可能被移動.
scrollWidth/scrollHeight - 包含滾動的內容區域, 但不包含滾動條本身自己的大小
scrollLeft/scrollTop - 滾動條的移動部分, 從左上角開始.
offsetWidth/offsetHeight -包含margin的盒子大小
offsetParent - 靜態的定位相對于最近的單元格, body.或者最近的定位元素.
offsetLeft/offsetTop - 盒子的左上角的位置相對于offsetParent.
下面概要了所有屬性的含義:
本文屬于吳統威的博客, 微信公眾號:bianchengderen,QQ群:186659233 的原創文章,轉載時請注明出處及相應鏈接:http://www.wutongwei.com/front/infor_showone.tweb?id=232 ,歡迎大家傳播與分享.
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com