Pemikiran menjelaskan apa perbedaan antara offsetHeight
, clientHeight
dan scrollHeight
atau offsetWidth
, clientWidth
dan scrollWidth
?
Seseorang harus mengetahui perbedaan ini sebelum bekerja di sisi klien. Kalau tidak setengah dari hidup mereka akan dihabiskan untuk memperbaiki UI.
Biola , atau sebaris di bawah:
function whatis(propType) {
var mainDiv = document.getElementById("MainDIV");
if (window.sampleDiv == null) {
var div = document.createElement("div");
window.sampleDiv = div;
}
div = window.sampleDiv;
var propTypeWidth = propType.toLowerCase() + "Width";
var propTypeHeight = propType + "Height";
var computedStyle = window.getComputedStyle(mainDiv, null);
var borderLeftWidth = computedStyle.getPropertyValue("border-left-width");
var borderTopWidth = computedStyle.getPropertyValue("border-top-width");
div.style.position = "absolute";
div.style.left = mainDiv.offsetLeft + Math.round(parseFloat((propType == "client") ? borderLeftWidth : 0)) + "px";
div.style.top = mainDiv.offsetTop + Math.round(parseFloat((propType == "client") ? borderTopWidth : 0)) + "px";
div.style.height = mainDiv[propTypeHeight] + "px";
div.style.lineHeight = mainDiv[propTypeHeight] + "px";
div.style.width = mainDiv[propTypeWidth] + "px";
div.style.textAlign = "center";
div.innerHTML = propTypeWidth + " X " + propTypeHeight + "( " +
mainDiv[propTypeWidth] + " x " + mainDiv[propTypeHeight] + " )";
div.style.background = "rgba(0,0,255,0.5)";
document.body.appendChild(div);
}
document.getElementById("offset").onclick = function() {
whatis('offset');
}
document.getElementById("client").onclick = function() {
whatis('client');
}
document.getElementById("scroll").onclick = function() {
whatis('scroll');
}
#MainDIV {
border: 5px solid red;
}
<button id="offset">offsetHeight & offsetWidth</button>
<button id="client">clientHeight & clientWidth</button>
<button id="scroll">scrollHeight & scrollWidth</button>
<div id="MainDIV" style="margin:auto; height:200px; width:400px; overflow:auto;">
<div style="height:400px; width:500px; overflow:hidden;">
</div>
</div>
javascript
html
dom
offsetheight
shibualexis
sumber
sumber
Jawaban:
Untuk mengetahui perbedaannya, Anda harus memahami model kotak , tetapi pada dasarnya:
clientHeight :
offsetHeight :
scrollTinggi :
Saya akan membuatnya lebih mudah:
Mempertimbangkan:
scrollHeight :
ENTIRE content & padding (visible or not)
Tinggi semua konten + bantalan, meskipun tinggi elemen.
clientHeight :
VISIBLE content & padding
Hanya ketinggian yang terlihat: bagian konten dibatasi oleh ketinggian elemen yang ditentukan secara eksplisit.
offsetHeight :
VISIBLE content & padding
+ border + scrollbar
Tinggi ditempati oleh elemen pada dokumen.
sumber
clientHeight
adalah ketinggian yang terlihatscrollHeight
danclientHeight
keduanya tampil sama meskipun layar memiliki lebih banyak konten dan scrollbar. Mengapa?* offsetHeight adalah pengukuran dalam piksel tinggi elemen CSS, termasuk border, padding, dan scrollbar horizontal elemen.
* properti clientHeight mengembalikan ketinggian elemen yang terlihat dalam piksel, termasuk padding, tetapi bukan batas, scrollbar, atau margin.
* Nilai scrollHeight sama dengan tinggi minimum elemen yang diperlukan untuk menyesuaikan semua konten di viewport tanpa menggunakan scrollbar vertikal. Ketinggian diukur dengan cara yang sama seperti clientHeight: ini termasuk padding elemen, tetapi tidak pada border, margin atau scrollbar horizontal.
Sama halnya dengan semua ini dengan lebar bukan tinggi.
sumber
Deskripsi saya untuk ketiganya:
position: absolute
keturunan elemen )position: absolute
yang) tanpa menggulir.Lalu ada juga:
sumber
Offset Berarti "jumlah atau jarak di mana sesuatu berada di luar garis". Margin atau Borders adalah sesuatu yang membuat tinggi atau lebar elemen HTML yang sebenarnya "out of line". Ini akan membantu Anda untuk mengingat bahwa:
Di sisi lain, clientHeight adalah sesuatu yang bisa Anda katakan bertolak belakang dengan OffsetHeight. Itu tidak termasuk perbatasan atau margin. Itu tidak termasuk padding karena itu adalah sesuatu yang berada di dalam wadah HTML, sehingga tidak dihitung sebagai pengukuran tambahan seperti margin atau perbatasan. Jadi:
ScrollHeight adalah semua area yang dapat digulir, sehingga gulir Anda tidak akan pernah melewati margin atau batas Anda, jadi itulah sebabnya scrollHeight tidak termasuk margin atau batas tapi ya padding tidak. Begitu:
sumber