MDN hakkında bu kavramların arkasındaki teoriyi açıklayan iyi bir makale var:
https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_dimensions_of_elements
Aynı zamanda sınırlamaClientRect'in genişliği / yüksekliği ile offsetWidth / offsetHeight arasındaki önemli kavramsal farklılıkları da açıklar.
Sonra, teoriyi doğru ya da yanlış kanıtlamak için bazı testlere ihtiyacınız var. Burada yaptığım şey: https://github.com/lingtalfi/dimensions-cheatsheet
Chrome53, ff49, safari9, edge13 ve ie11 için test yapıyor.
Testlerin sonuçları teorinin genellikle doğru olduğunu kanıtlar. Testler için, her birinde 10 lorem ipsum paragrafı içeren 3 div oluşturdum. Onlara bazı css uygulandı:
.div1{
width: 500px;
height: 300px;
padding: 10px;
border: 5px solid black;
overflow: auto;
}
.div2{
width: 500px;
height: 300px;
padding: 10px;
border: 5px solid black;
box-sizing: border-box;
overflow: auto;
}
.div3{
width: 500px;
height: 300px;
padding: 10px;
border: 5px solid black;
overflow: auto;
transform: scale(0.5);
}
İşte sonuçlar:
div1
- ofsetWidth: 530 (chrome53, ff49, safari9, edge13, ie11)
- ofsetHeight: 330 (chrome53, ff49, safari9, edge13, ie11)
- bcr.width: 530 (chrome53, ff49, safari9, edge13, ie11)
bcr.height: 330 (chrome53, ff49, safari9, edge13, ie11)
clientWidth: 505 (chrome53, ff49, safari9)
- clientWidth: 508 (kenar13)
- istemci Genişliği: 503 (ie11)
clientHeight: 320 (chrome53, ff49, safari9, edge13, ie11)
scrollWidth: 505 (chrome53, safari9, ff49)
- scrollWidth: 508 (kenar13)
- kaydırma genişliği: 503 (ie11)
- scrollHeight: 916 (chrome53, safari9)
- scrollHeight: 954 (ff49)
- scrollHeight: 922 (kenar13; yani11)
DIV2
- ofsetWidth: 500 (chrome53, ff49, safari9, edge13, ie11)
- ofsetHeight: 300 (chrome53, ff49, safari9, edge13, ie11)
- bcr.width: 500 (chrome53, ff49, safari9, edge13, ie11)
- bcr.height: 300 (chrome53, ff49, safari9)
- bcr.height: 299.9999694824219 (kenar13, ie11)
- clientWidth: 475 (chrome53, ff49, safari9)
- clientWidth: 478 (kenar13)
- istemci Genişliği: 473 (ie11)
clientHeight: 290 (chrome53, ff49, safari9, edge13, ie11)
scrollWidth: 475 (chrome53, safari9, ff49)
- scrollWidth: 478 (kenar13)
- scrollWidth: 473 (ie11)
- scrollHeight: 916 (chrome53, safari9)
- scrollHeight: 954 (ff49)
- scrollHeight: 922 (kenar13; yani11)
DIV3
- ofsetWidth: 530 (chrome53, ff49, safari9, edge13, ie11)
- ofsetHeight: 330 (chrome53, ff49, safari9, edge13, ie11)
- bcr.width: 265 (chrome53, ff49, safari9, edge13, ie11)
- bcr.height: 165 (chrome53, ff49, safari9, edge13, ie11)
- clientWidth: 505 (chrome53, ff49, safari9)
- clientWidth: 508 (kenar13)
- istemci Genişliği: 503 (ie11)
clientHeight: 320 (chrome53, ff49, safari9, edge13, ie11)
scrollWidth: 505 (chrome53, safari9, ff49)
- scrollWidth: 508 (kenar13)
- kaydırma genişliği: 503 (ie11)
- scrollHeight: 916 (chrome53, safari9)
- scrollHeight: 954 (ff49)
- scrollHeight: 922 (kenar13; yani11)
Dolayısıyla, edge13 ve ie11'deki boundingClientRect'in yükseklik değeri (beklenen 300 yerine 299.9999694824219) dışında, sonuçlar bunun arkasındaki teorinin çalıştığını doğrulamaktadır.
Oradan, bu kavramları tanımım:
- offsetWidth / offsetHeight: düzen kenarlık kutusunun boyutları
- boundingClientRect: işleme kenarlık kutusunun boyutları
- clientWidth / clientHeight: düzen dolgu kutusunun görünür bölümünün boyutları (kaydırma çubukları hariç)
- scrollWidth / scrollHeight: kaydırma çubukları tarafından kısıtlanmamışsa, düzen dolgu kutusunun boyutları
Not: varsayılan dikey kaydırma çubuğunun genişliği kenarlarda 12 piksel 13, krom53'te 15 piksel, ff49 ve safari9 ve ie11'de 17 pikseldir (ekran görüntülerinden photoshop'ta yapılan ölçümlerle yapılır ve testlerin sonuçlarıyla kanıtlanmıştır).
Ancak, bazı durumlarda, uygulamanız varsayılan dikey kaydırma çubuğunun genişliğini kullanmıyor olabilir.
Bu nedenle, bu kavramların tanımları göz önüne alındığında, dikey kaydırma çubuğunun genişliği eşit olmalıdır (sözde kodda):
Not, mizanpaj vs oluşturma anlamıyorsanız, lütfen mdn makalesini okuyun.
Ayrıca, başka bir tarayıcınız varsa (veya testlerin sonuçlarını kendiniz görmek istiyorsanız) test sayfamı burada görebilirsiniz: http://codepen.io/lingtalfi/pen/BLdBdL
element.getBoundingClientRect()
( developer.mozilla.org/en-US/docs/Web/API/Element.clientWidth adresindeki nota bakın )