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:hidden や opacity: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を含めたサイズを取得するには?
A
outerWidth(true) / outerHeight(true) を使います。引数に true を渡すとmarginまで含めた外側全体のサイズを返します。

