JavaScript における clientWidth、offsetWidth、scrollWidth の違い

JavaScript における clientWidth、offsetWidth、scrollWidth の違い

1. コンセプト

これらはすべて Element の属性であり、要素の幅を示します。

Element.clientWidth コンテンツ + 内側の余白 - スクロールバー ----- 境界線と外側の余白を除く == 表示コンテンツ
Element.scrollWidth コンテンツ + パディング + オーバーフロー サイズ-----境界線と余白を除く == 実際のコンテンツ
Element.offsetWidth 要素の幅(コンテンツ + パディング + 境界線 + スクロールバー) == コントロール全体

2. 例

1. 水平スクロールバーのみ

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
 <メタ文字セット="UTF-8">
 <title>scrollWidth、clientWidth、offsetWidth をテストする</title>
 <スタイル タイプ="text/css">
  本文、html {
   マージン: 0px;
   パディング: 0px;
  }

  #父親 {
   幅: 300ピクセル;
   オーバーフロー:自動;
   パディング: 10px;
   背景: レベッカパープル;
   境界線: 10px 実線の赤;
   マージン: 20px;
  }

  #子供 {
   高さ: 100px;
   幅: 1000ピクセル;
   パディング: 10px;
   境界線: 20px 実線 #ffcc99;
   マージン: 30px;
  }
 </スタイル>
</head>
<本文>

<div id="父">
 <div id="child"></div>
</div>

<script type="text/javascript">
 var 子 = document.getElementById("子");
 console.log("child.width:", window.getComputedStyle(child).width); //コンテンツの幅: 1000px
 console.log("child.clientWidth:", child.clientWidth); //コンテンツ + 内側の余白 - スクロールバー-----境界線と外側の余白を除く == 表示コンテンツ 1020px
 console.log("child.scrollWidth:", child.scrollWidth); //コンテンツ + パディング + オーバーフロー サイズ ----- 境界線と余白を除く == 実際のコンテンツ 1020px
 console.log("child.offsetWidth:", child.offsetWidth); //要素の幅(コンテンツ + パディング + 境界線 + スクロールバー) == 全体、コントロール全体は 1060 ピクセルです

 var 父親 = document.getElementById("父親");
 console.log("father.width:", window.getComputedStyle(father).width); //コンテンツの幅: 300px
 console.log("father.clientWidth:", father.clientWidth); //コンテンツ + 内側の余白 - スクロールバー ----- 境界線と外側の余白は含まれません == 表示コンテンツ 320px
 console.log("father.scrollWidth:", father.scrollWidth); //コンテンツ + パディング + オーバーフロー サイズ ----- 境界線と余白を除く == 実際のコンテンツ 1100px
 console.log("father.offsetWidth:", father.offsetWidth); //要素の幅(コンテンツ + パディング + 境界線 + スクロールバー) == 全体、コントロール全体は 340px です
</スクリプト>
</本文>
</html>

水平スクロール バーのみがある場合、親要素は子要素の幅の影響を受けます。もう 1 つの特別な要素は scrollWidth です。

親要素の scrollWidth は、子要素のコンテンツ + パディング + 境界線 + 子要素の片側のマージン + 親要素の片側のパディングです。

2. 水平スクロールバーと垂直スクロールバーがあります

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
 <メタ文字セット="UTF-8">
 <title>scrollWidth、clientWidth、offsetWidth をテストする</title>
 <スタイル タイプ="text/css">
  本文、html {
   マージン: 0px;
   パディング: 0px;
  }

  #父親 {
   高さ: 50px;
   幅: 300ピクセル;
   オーバーフロー:自動;
   パディング: 10px;
   背景: レベッカパープル;
   境界線: 10px 実線の赤;
   マージン: 20px;
  }

  #子供 {
   高さ: 100px;
   幅: 1000ピクセル;
   パディング: 10px;
   境界線: 20px 実線 #ffcc99;
   マージン: 30px;
  }
 </スタイル>
</head>
<本文>

<div id="父">
 <div id="child"></div>
</div>

<script type="text/javascript">
 var 子 = document.getElementById("子");
 console.log("child.width:", window.getComputedStyle(child).width); //コンテンツの幅: 1000px
 console.log("child.clientWidth:", child.clientWidth); //コンテンツ + 内側の余白 - スクロールバー-----境界線と外側の余白を除く == 表示コンテンツ 1020px
 console.log("child.scrollWidth:", child.scrollWidth); //コンテンツ + パディング + オーバーフロー サイズ ----- 境界線と余白を除く == 実際のコンテンツ 1020px
 console.log("child.offsetWidth:", child.offsetWidth); //要素の幅(コンテンツ + パディング + 境界線 + スクロールバー) == 全体、コントロール全体は 1060 ピクセルです

 var 父親 = document.getElementById("父親");
 console.log("father.width:", window.getComputedStyle(father).width); //コンテンツの幅: 285px
 console.log("father.clientWidth:", father.clientWidth); //コンテンツ + 内側の余白 - スクロールバー ----- 境界線と外側の余白は含まれません == 表示コンテンツ 305px
 console.log("father.scrollWidth:", father.scrollWidth); //コンテンツ + パディング + オーバーフロー サイズ ----- 境界線と余白を除く == 実際のコンテンツ 1100px
 console.log("father.offsetWidth:", father.offsetWidth); //要素の幅(コンテンツ + パディング + 境界線 + スクロールバー) == 全体、コントロール全体は 340px です
</スクリプト>
</本文>
</html>

親要素の幅は、親要素のコンテンツの幅 - スクロールバーの幅(約15px)です。

親要素のクライアント幅は、親要素のコンテンツ幅 + 親要素のパディング幅 - スクロールバーの幅(約 15 ピクセル)です。

上記は、ElementにおけるclientWidth、offsetWidth、scrollWidthの違いの詳細内容です。clientWidth、offsetWidth、scrollWidthの違いについての詳細は、123WORDPRESS.COMの他の関連記事もご覧ください。

以下もご興味があるかもしれません:
  • JavaScript の offsetWidth、clientWidth、innerWidth および関連する属性メソッド
  • scrollWidth、clientWidth、offsetWidthの違い
  • javascript scrollLeft、scrollWidth、clientWidth、offsetWidth の完全な説明
  • scrollWidth、clientWidth、offsetWidthの違い
  • HTML: scrollLeft、scrollWidth、clientWidth、offsetWidth の完全な説明
  • this.clientWidthとthis.offsetWidthの違いは何ですか
  • ClientWidthに関する情報

<<:  CentOS 7 構成 Tomcat9+MySQL ソリューション

>>:  Navicat でストアド プロシージャ、トリガーを作成し、カーソルを使用する簡単な例 (画像とテキスト)

推薦する

なぜ Tomcat が起動できないのでしょうか?

目次現象:ポートの使用:ファイルにスペルミスがあります:現象: Tomcat がインストールされ、W...

LinuxシステムにDockerをインストールするプロセス

このブログでは、Docker をインストールするプロセスを簡単な手順で説明します。Docker のイ...

Angular 依存性注入の説明

目次概要1. 依存性注入2. Angularの依存性注入フレームワーク概要依存性注入: デザインパタ...

iframe に関するいくつかの発見と考察

この物語は、今日の予期せぬ発見から始まります。同社には複数のウェブサイトがある。友達リンクにはお互い...

MySQL の遅いクエリの落とし穴

目次1. 遅いクエリ構成1-1. スロークエリを有効にする2. 遅いクエリSQLの分析を説明する3....

iframe を介してフレームセットを本体に配置する

フレームセットと本文は同じレベルにあるため、本文にフレームセットを配置することはできません。まずペー...

Vue.jsはタイムライン機能を実装します

この記事では、タイムライン機能を実装するためのVue.jsの具体的なコードを参考までに共有します。具...

MySQLクエリ条件のnot inとinの違いと理由

まずSQLを書く SELECT DISTINCT from_id タラから cod.from_id ...

MySQL サブクエリ (ネストされたクエリ)、結合テーブル、複合クエリの詳細な説明

1. サブクエリMySQL 4.1以降はサブクエリをサポートしていますサブクエリ:別のクエリ内にネス...

vue3 を使用してマテリアル ライブラリを構築する方法

目次なぜマテリアルライブラリが必要なのでしょうか?材質は何ですか?素材の種類fuep、vue3 ベー...

JS を使用した簡単な雪効果の例の詳細な説明

目次序文主な実装コードHTMLコードJSコード序文南の友達の多くは、雪をほとんど見たことがない、ある...

Linux ファイルディレクトリ管理コマンドの概要

タッチコマンドこれには 2 つの機能があります。1 つは、既存のファイルの時間タグを現在のシステム時...

いくつかのMySQL更新操作のケース分析

目次ケーススタディアカウント残高を更新する直接更新楽観的ロック方式ロックフリーソリューションキューイ...

VMware 12 での Ubuntu 16.04 インストール チュートリアル

この記事では、VMware 12でのUbuntu 16.04のインストールチュートリアルを参考までに...

MySQL の重要なパフォーマンス インデックスの計算と最適化方法の概要

1 QPS 計算 (1 秒あたりのクエリ数) MyISAMエンジンベースのDBの場合 MySQL&g...