ऑफसेटहाइट, क्लाइंटहाइट, स्क्रॉलहाइट क्या है?


235

समझाने के बारे में सोचा कि क्या अंतर है offsetHeight, clientHeightऔर scrollHeightया offsetWidth, clientWidthऔर scrollWidth?

क्लाइंट पक्ष पर काम करने से पहले किसी को यह अंतर पता होना चाहिए। अन्यथा उनका आधा जीवन यूआई को ठीक करने में व्यतीत होगा।

फिडल , या नीचे इनलाइन:

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>


6
यह प्रश्न ऑफ़-टॉपिक प्रतीत होता है क्योंकि यह केवल एक टिप प्रदान करता है। एकमात्र प्रश्न 'प्रश्न' शीर्षक में है।
enhzflep

जवाबों:


544

अंतर जानने के लिए आपको बॉक्स मॉडल को समझना होगा , लेकिन मूल रूप से:

ग्राहक :

गद्दी लेकिन सहित पिक्सल, में एक तत्व के भीतरी ऊंचाई रिटर्न नहीं क्षैतिज स्क्रॉलबार ऊंचाई , सीमा , या मार्जिन

ऑफसेट :

एक माप जो है भी शामिल तत्व सीमाओं , तत्व ऊर्ध्वाधर गद्दी, तत्व क्षैतिज स्क्रॉलबार (मौजूद होने पर, यदि प्रदान की गई) और तत्व सीएसएस ऊंचाई।

स्क्रॉलहाइट :

एक तत्व की सामग्री की ऊंचाई की माप है सहित सामग्री नहीं दिखाई स्क्रीन पर अतिप्रवाह के कारण


मैं इसे आसान बनाऊंगा:

विचार करें:

<element>                                     
    <!-- *content*: child nodes: -->        | content
    A child node as text node               | of
    <div id="another_child_node"></div>     | the
    ... and I am the 4th child node         | element
</element>                                    

स्क्रॉलहाइट : तत्व की ऊँचाई के बावजूद सभी सामग्री + गद्दी ENTIRE content & padding (visible or not)
की ऊँचाई।

क्लाइंटहाइट : VISIBLE content & padding
केवल दृश्यमान ऊंचाई: तत्व का स्पष्ट रूप से परिभाषित ऊंचाई तक सीमित सामग्री भाग।

ऑफसेटहाइट : VISIBLE content & padding + border + scrollbar
दस्तावेज़ पर तत्व द्वारा कब्जा की गई ऊँचाई।

scrollHeight क्लाइंटहाइट और ऑफसेटहाइट


और यदि आप केवल दृश्यमान ऊंचाई चाहते हैं
मुहम्मद उमर

2
clientHeightदिखाई ऊंचाई है
आंद्रे Figueiredo

9
यही कारण है कि मैं एसओ से प्यार करता हूं, इसे स्पष्ट करने के प्रयास के लिए धन्यवाद!
हेरिक

2
नोट: अगर तत्व की स्थिति है तो ऑफसेटहाइट शून्य वापस आ सकता है: निश्चित। एसवीजी ऑफसेटहाइट क्रोम में अपग्रेड किया जा रहा है। यदि तत्व प्रदर्शित होता है तो ऑफसेटहाइट पीछे हट जाएगा: कोई भी, या प्रदर्शन के साथ पूर्वज है: कोई नहीं
Drenai

3
मेरे scrollHeightऔर clientHeightदोनों स्क्रीन के समान सामग्री और स्क्रॉलबार होने के बावजूद समान आ रहे हैं। क्यों?
ब्लैंकफेस

5

* ऑफसेटहाइट तत्व की सीएसएस ऊंचाई के पिक्सल में एक माप है, जिसमें सीमा, पैडिंग और तत्व के क्षैतिज स्क्रॉलबार शामिल हैं।

* क्लाइंटहाइट प्रॉपर्टी पिक्सेल में एक तत्व की देखने योग्य ऊंचाई देता है, जिसमें पैडिंग भी शामिल है, लेकिन बॉर्डर, स्क्रॉलबार या मार्जिन नहीं।

* स्क्रॉलहाइट मान न्यूनतम ऊंचाई के बराबर है, जिसमें तत्व को वर्टिकल स्‍टार्पबार का उपयोग किए बिना व्यूपोर्ट की सभी सामग्री को फिट करने की आवश्‍यकता होगी । ऊंचाई को क्लाइंटहाइट के समान मापा जाता है: इसमें तत्व की पैडिंग शामिल है, लेकिन इसकी सीमा, मार्जिन या क्षैतिज स्क्रॉलबार नहीं।

समान ऊंचाई के बजाय चौड़ाई के साथ इन सभी के लिए मामला है।


2

तीनों के लिए मेरा विवरण:

  • ऑफसेटहाइट : माता-पिता की "सापेक्ष स्थिति" अंतरिक्ष का कितना हिस्सा तत्व द्वारा लिया जाता है। (अर्थात। यह तत्व के position: absoluteवंशजों की उपेक्षा करता है )
  • क्लाइंटहाइट : ऑफसेट-ऊँचाई के समान, इसके अलावा यह तत्व की अपनी सीमा, मार्जिन और इसके क्षैतिज स्क्रॉल-बार की ऊंचाई को छोड़ देता है (यदि इसमें एक है)।
  • स्क्रॉलहाइट : position: absoluteबिना स्क्रॉल किए किसी भी तत्व की सामग्री / वंशज (सभी सहित ) को देखने के लिए कितना स्थान आवश्यक है ।

फिर वहाँ भी है:


सीएसएस ट्रांसफॉर्मेशन के बारे में नोट इस मामले में काफी महत्वपूर्ण है।
जनवरी ब्रैडेक

0

ऑफसेट का अर्थ है "वह राशि या दूरी जिसके द्वारा कुछ लाइन से बाहर है"। मार्जिन या बॉर्डर एक ऐसी चीज़ है जो HTML लाइन की वास्तविक ऊंचाई या चौड़ाई "लाइन से बाहर" बनाती है। यह आपको याद रखने में मदद करेगा कि:

  • ऑफसेटहाइट तत्व की सीएसएस ऊंचाई के पिक्सल में एक माप है, जिसमें सीमा, पैडिंग और तत्व के क्षैतिज स्क्रॉलबार शामिल हैं।

दूसरी ओर, क्लाइंटहाइट एक ऐसी चीज़ है, जिसे आप ऑफ़सेटहाइट के विपरीत कह सकते हैं। इसमें सीमा या मार्जिन शामिल नहीं है। इसमें पैडिंग शामिल है क्योंकि यह कुछ ऐसा है जो HTML कंटेनर के अंदर रहता है, इसलिए यह मार्जिन या बॉर्डर जैसे अतिरिक्त मापों की गिनती नहीं करता है। इसलिए :

  • क्लाइंटहाइट प्रॉपर्टी पिक्सल में किसी तत्व की देखने योग्य ऊँचाई को पैडिंग सहित लौटाती है, लेकिन बॉर्डर, स्क्रॉलबार या मार्जिन नहीं।

स्क्रॉलहाइट सभी स्क्रॉल करने योग्य क्षेत्र है, इसलिए आपकी स्क्रॉल आपके मार्जिन या सीमा पर कभी नहीं चलेगी, इसीलिए स्क्रॉलहाइट में मार्जिन या बॉर्डर शामिल नहीं है, लेकिन हाँ पैडिंग है। इसलिए:

  • स्क्रॉलहाइट मान न्यूनतम ऊंचाई के बराबर है, जिसमें तत्व को स्क्रॉल स्क्रॉल का उपयोग किए बिना व्यूपोर्ट में सभी सामग्री को फिट करने के लिए आवश्यक होगा। ऊंचाई को क्लाइंटहाइट के समान मापा जाता है: इसमें तत्व की पैडिंग शामिल है, लेकिन इसकी सीमा, मार्जिन या क्षैतिज स्क्रॉलबार नहीं।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.