MDN पर एक अच्छा लेख है जो उन अवधारणाओं के पीछे सिद्धांत की व्याख्या करता है:
https://developer.mozilla.org/en-US/docs/Web/API/CSS_Object_Model/Determining_the_imimensions_of_elements
यह बाउंडक्लाइंटRect की चौड़ाई / ऊँचाई बनाम ऑफ़सेटविंड / ऑफसेटहाइट के बीच महत्वपूर्ण वैचारिक अंतर भी बताता है।
फिर, सिद्धांत को सही या गलत साबित करने के लिए, आपको कुछ परीक्षणों की आवश्यकता है। यही मैंने यहां किया है: https://github.com/lingtalfi/dimensions-cheatsheet
यह chrome53, ff49, safari9, edge13 और ie11 के लिए परीक्षण कर रहा है।
परीक्षणों के परिणाम साबित करते हैं कि सिद्धांत आम तौर पर सही है। परीक्षणों के लिए, मैंने प्रत्येक में 10 लोरेम इप्सम पैराग्राफ वाले 3 डिविज़ बनाए। कुछ सीएसएस उन्हें लागू किया गया था:
.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);
}
और यहाँ परिणाम हैं:
div1
- ऑफसेट: 530 (chrome53, ff49, safari9, edge13, ie11)
- ऑफसेट: 330 (chrome53, ff49, safari9, edge13, ie11)
- bcr.width: 530 (chrome53, ff49, safari9, edge13, ie11)
bcr.height: 330 (chrome53, ff49, safari9, edge13, ie11)
ग्राहक: 505 (क्रोम 53, ff49, सफारी 9)
- ग्राहक: 508 (एज 13)
- ग्राहक: 503 (यानी 11)
क्लाइंटहाइट: 320 (chrome53, ff49, safari9, edge13, ie11)
स्क्रॉलविद: 505 (क्रोम 53, सफारी 9, ff49)
- स्क्रॉलविद: 508 (एज 13)
- स्क्रॉलविद: 503 (यानी 11)
- स्क्रॉलहाइट: 916 (क्रोम 53, सफारी 9)
- स्क्रॉलहाइट: 954 (ff49)
- स्क्रॉलहाइट: 922 (एज 13, यानी 11)
DIV2
- ऑफसेट: 500 (chrome53, ff49, safari9, edge13, ie11)
- ऑफसेट: 300 (chrome53, ff49, safari9, edge13, ie11)
- bcr.width: 500 (chrome53, ff49, safari9, edge13, ie11)
- bcr.height: 300 (chrome53, ff49, safari9)
- bcr.height: 299.9999694824219 (एज 13, यानी 11)
- ग्राहक: 475 (chrome53, ff49, सफारी 9)
- क्लाइंटविड: 478 (एज 13)
- ग्राहक: 473 (यानी 11)
क्लाइंटहाइट: 290 (chrome53, ff49, safari9, edge13, ie11)
स्क्रॉलविद: 475 (chrome53, safari9, ff49)
- स्क्रॉलविद: 478 (एज 13)
- स्क्रॉलविद: 473 (यानी 11)
- स्क्रॉलहाइट: 916 (क्रोम 53, सफारी 9)
- स्क्रॉलहाइट: 954 (ff49)
- स्क्रॉलहाइट: 922 (एज 13, यानी 11)
DIV3
- ऑफसेट: 530 (chrome53, ff49, safari9, edge13, ie11)
- ऑफसेट: 330 (chrome53, ff49, safari9, edge13, ie11)
- bcr.width: 265 (chrome53, ff49, safari9, edge13, ie11)
- bcr.height: 165 (chrome53, ff49, safari9, edge13, ie11)
- ग्राहक: 505 (क्रोम 53, ff49, सफारी 9)
- ग्राहक: 508 (एज 13)
- ग्राहक: 503 (यानी 11)
क्लाइंटहाइट: 320 (chrome53, ff49, safari9, edge13, ie11)
स्क्रॉलविद: 505 (क्रोम 53, सफारी 9, ff49)
- स्क्रॉलविद: 508 (एज 13)
- स्क्रॉलविद: 503 (यानी 11)
- स्क्रॉलहाइट: 916 (क्रोम 53, सफारी 9)
- स्क्रॉलहाइट: 954 (ff49)
- स्क्रॉलहाइट: 922 (एज 13, यानी 11)
इसलिए, किनारे 13 और ie11 में बाउंडिंगक्लायंटRect की ऊंचाई मान (299.99996924219 के बजाय अपेक्षित 300) के अलावा, परिणाम पुष्टि करते हैं कि इस काम के पीछे सिद्धांत।
वहाँ से, यहाँ उन अवधारणाओं की परिभाषा है:
- ऑफ़सेटविद / ऑफसेटहाइट: लेआउट बॉर्डर बॉक्स के आयाम
- boundingClientRect: रेंडरिंग बॉर्डर बॉक्स के आयाम
- clientWidth / clientHeight: लेआउट पैडिंग बॉक्स के दृश्य भाग के आयाम (स्क्रॉल पट्टियों को छोड़कर)
- स्क्रॉलविद / स्क्रॉलहाइट: लेआउट पैडिंग बॉक्स के आयाम अगर यह स्क्रॉल बार द्वारा विवश नहीं किया गया था
नोट: डिफ़ॉल्ट वर्टिकल स्क्रॉल बार की चौड़ाई एज 13 में 12px, क्रोम क्रोम में 15px, ff49 और सफारी 9, और 1711 यानी 11 में (स्क्रीनशॉट से फ़ोटोशॉप में माप द्वारा किया गया है, और परीक्षणों के परिणामों द्वारा सही साबित हुआ)।
हालाँकि, कुछ मामलों में, शायद आपका ऐप डिफ़ॉल्ट वर्टिकल स्क्रॉल बार की चौड़ाई का उपयोग नहीं कर रहा है।
तो, उन अवधारणाओं की परिभाषा को देखते हुए, ऊर्ध्वाधर स्क्रॉल बार की चौड़ाई (छद्म कोड में) के बराबर होनी चाहिए:
ध्यान दें, यदि आपको लेआउट बनाम रेंडरिंग समझ में नहीं आता है तो कृपया mdn लेख पढ़ें।
इसके अलावा, यदि आपके पास एक और ब्राउज़र है (या यदि आप अपने लिए परीक्षण के परिणाम देखना चाहते हैं), तो आप यहाँ मेरा परीक्षण पृष्ठ देख सकते हैं: http://codepen.io/lingtalfi/pen/BLdBdL
element.getBoundingClientRect()
( डेवलपर.