Element.scrollHeight - スクロール分を含めた高さを取得する

投稿日: / 更新日:

JavaScriptの、ElementオブジェクトのscrollHeightはスクロール分を含めた全体の高さを取得するプロパティです。

説明

scrollHeightプロパティはスクロール分を含めた全体の高さです。スクロールバーがあるかないかで計算方法が変わります。

border

padding

content

スクロールバーが表示されていない場合、heightとpaddingとborderの合計で、marginを含まない値となります。例えば上記のような要素があったとします。scrollHeightプロパティを参照すると、border(青色)、padding(白色)、height(茶色)の合計値が取得できます。これに関しては、offsetHeightと同じです。

内部コンテンツ

さて、scrollHeightの特徴はここからです。要素がスクロール可能な状態になっている時、考え方が全く変わってきます。例えば上記のように青い枠線を持った要素のscrollHeightを考えてみましょう。この青い要素は自身よりも大きいサイズの画像を内包していて、スクロール表示させています。

この時、scrollHeightの起点はborderの左上ではなく、paddingの左上となります。そして、スクロールできる分の高さがscrollHeightの数値となるのです。

border

padding

content

もう1つ例を見ておきます。内包するコンテンツが小さく、スクロールをする必要がなくても、スクロールバーが表示されている状態の場合、scrollHeightの起点はpaddingの左上となり、そして、スクロールバーを含めない、paddingとheightの合計がscrollHeightの値となります。

さて、ChromeやSafariと、Firefoxで取得できるscrollHeightの値が違うことがあります。これの原因は、paddingとスクロールバーの関係です。

Firefoxの場合のスクロールバー
Firefoxの場合のスクロールバー

まずはFirefoxの例を見て下さい。下部にスクロールバーがある時、padding-bottomの幅が削られてしまいます。

Chromeの場合のスクロールバー
Chromeの場合のスクロールバー

一方、Chromeの例を見て下さい。下部にスクロールバーがある時、padding-bottomの幅は削られません。Safariも同様です。この削られるか、削られないかの分の幅が、scrollHeightで取得できる値のズレとなって表れます。ブラウザ間で異なる値になる可能性が高いscrollHeightは、プログラムに組み込みにくいということが言えますね。

サンプルコード

<p id="target">SYNCER</p>
// 要素を取得
var pElement = document.getElementById( "target" ) ;

// scrollHeightを取得
var scrollHeight = pElement.scrollHeight ;

デモ

Element.scrollHeightを取得して表示します。

構文

readonly long scrollHeight = Element.scrollHeight

返り値

項目説明
scrollHeightスクロールできる分を含めた全体の高さ。スクロールバーがある時とない時で計算方法が異なる。インライン要素の場合は0

関連項目