web-dev-qa-db-ja.com

offsetHeight、clientHeight、scrollHeightとは何ですか?

offsetHeightname__、clientHeightname__とscrollHeightname__またはoffsetWidthname__、clientWidthname__とscrollWidthname__の違いは何ですか?

クライアント側で作業する前に、この違いを知っておく必要があります。さもなければ彼らの人生の半分はUIの修正に費やされるでしょう。

フィドル 、または下にインライン:

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>
190
shibualexis

違いを知るためには、 ボックスモデル を理解する必要がありますが、基本的には:

clientHeight

パディングを含む要素の内部の高さをピクセル単位で返します。ただし、not水平方向scrollbar heightborder、またはmargin =

offsetHeight

含む要素borders、要素の垂直方向のパディング、要素の水平方向のscrollbar(存在する場合、レンダリングされている場合)、要素CSS高さ。

scrollHeight

要素の内容の高さの尺度です。含む内容見えない画面上== オーバーフローによる


簡単にしましょう。

検討してください:

<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>                                    

scrollHeightENTIRE content & padding (visible or not)
要素の高さにかかわらず、すべてのコンテンツの高さ+パディング。

clientHeightVISIBLE content & padding
可視の高さのみ:コンテンツ部分は、要素の明示的に定義された高さによって制限されます。

offsetHeightVISIBLE content & padding+ border + scrollbar
文書上の要素によって占められている高さ。

scrollHeightclientHeight and offsetHeight

461

* offsetHeightは、要素のCSSの高さをピクセル単位で表した値です。ボーダー、パディング、および要素の水平スクロールバーを含みます。

* clientHeightプロパティは、要素の表示可能な高さをピクセル単位で返します。ただし、境界線、スクロールバー、または余白は含まれません。

* scrollHeight値は、使用せずにビューポート内のすべてのコンテンツに合わせるために要素が必要とする最小の高さと同じです。垂直スクロールバー高さはclientHeightと同じ方法で測定されます。要素のパディングは含まれますが、そのボーダー、マージン、または水平スクロールバーは含まれません。

高さの代わりに幅があるこれらすべての場合も同様です。

2
Steev James