【jQuery】要素の幅・高さを取得・設定する完全ガイド|width/height/outerWidth/innerWidth全解説

【jQuery】要素の高さを自動で揃える方法 jQuery

jQueryには要素のサイズを取得・設定するメソッドが複数あります。width() / height() / innerWidth() / outerWidth() の違いを理解することで、padding・border・marginを含むさまざまなサイズ計算が正確にできるようになります。

この記事でわかること

  • width()/height()、innerWidth()、outerWidth()の違い
  • ウィンドウ・ドキュメントのサイズ取得方法
  • サイズを設定(書き込み)する方法
  • レスポンシブ対応のリサイズ検出
  • バニラJSとの対応関係
スポンサーリンク

1. width/height メソッドの種類と違い

jQueryのサイズ取得メソッドは、paddingやborderを含むかどうかで4種類に分かれます。

メソッド コンテンツ padding border margin
width() / height() × × ×
innerWidth() / innerHeight() × ×
outerWidth() / outerHeight() ×
outerWidth(true) / outerHeight(true)

2. 基本的な取得方法

var $box = $('.box');

// コンテンツ幅・高さ(padding/borderを除く)
var w = $box.width();          // px数値を返す(単位なし)
var h = $box.height();

// padding を含む
var iw = $box.innerWidth();
var ih = $box.innerHeight();

// padding + border を含む
var ow = $box.outerWidth();
var oh = $box.outerHeight();

// padding + border + margin を含む
var owm = $box.outerWidth(true);
var ohm = $box.outerHeight(true);

console.log(w, iw, ow, owm);

3. ウィンドウ・ドキュメントのサイズ取得

// ウィンドウ(ビューポート)のサイズ
var winW = $(window).width();
var winH = $(window).height();

// ドキュメント全体のサイズ(スクロール含む)
var docW = $(document).width();
var docH = $(document).height();

console.log("ビューポート:", winW, "x", winH);
console.log("ドキュメント:", docW, "x", docH);
$(window).width() と画面幅の違い
$(window).width() はスクロールバーを除いた表示領域の幅です。画面解像度(screen.width)とは異なります。レスポンシブ対応のブレークポイント判定に使う場合はこちらが適切です。

4. サイズを設定(書き込み)する

var $box = $('.box');

// 数値で設定(pxが付加される)
$box.width(300);
$box.height(200);

// 文字列で設定(単位を含む)
$box.width('50%');
$box.height('auto');

// 関数で設定(現在値を引数で受け取れる)
$box.width(function (index, currentWidth) {
  return currentWidth * 2;  // 現在の幅を2倍に
});

5. リサイズイベントと組み合わせる

$(function () {
  function adjustLayout() {
    var winW = $(window).width();

    if (winW < 768) {
      // スマホ: 高さを自動に
      $('.sidebar').height('auto');
    } else {
      // PC: メインコンテンツに高さを揃える
      var mainH = $('.main').outerHeight();
      $('.sidebar').height(mainH);
    }
  }

  adjustLayout();  // 初期実行

  // リサイズのたびに実行(throttle推奨)
  $(window).on('resize', function () {
    adjustLayout();
  });
});

6. バニラJSとの対応関係

jQuery バニラJS
$el.width() el.clientWidth – padding(CSS pixel)
$el.innerWidth() el.clientWidth
$el.outerWidth() el.offsetWidth
$el.outerWidth(true) offsetWidth + margin(別途計算)
$(window).width() document.documentElement.clientWidth
$(document).height() document.documentElement.scrollHeight

まとめ

jQueryのサイズ取得メソッドはpadding・border・marginの包含範囲で4種類あります。ヘッダーや要素の実際の表示サイズには outerHeight()、コンテンツ領域のみ計算するには width() と使い分けましょう。

関連記事: jQueryで指定した要素の幅と高さを取得する方法 / 追従ヘッダーの高さに合わせてアンカーリンクの移動先を調整する方法

よくある質問(FAQ)

Qwidth()とouterWidth()はどちらを使えばいいですか?
A要素の「見た目のサイズ(paddingとborder込み)」を取得したい場合は outerWidth() を使います。CSSのコンテンツ幅のみ知りたい場合は width() です。ヘッダー高さを取得してオフセット補正する場面では outerHeight() が正確です。
Qwidth()が0を返す場合はどうすればいいですか?
A要素が非表示(display:none)の場合、width() は0を返します。visibility:hiddenopacity:0 では正しい値が返ります。また、要素がまだDOMに追加されていない場合も0になります。
Qウィンドウのサイズ変更を検知するには?
A$(window).on("resize", function(){ ... }) でリサイズイベントを監視できます。高頻度で発火するため、throttleやdebounceで間引くとパフォーマンスが向上します。
Q$(window).width()とscreen.widthの違いは?
A$(window).width() はブラウザの表示領域(ビューポート)の幅です。screen.width は物理画面の解像度です。レスポンシブ対応のJS処理には $(window).width() を使ってください。
Qmarginを含めたサイズを取得するには?
AouterWidth(true) / outerHeight(true) を使います。引数に true を渡すとmarginまで含めた外側全体のサイズを返します。