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

推薦する

Docker 経由で wsl の tar ファイルを作成する方法

最近VScodeのリモート開発機能をいじっています。Dockerのコンテナに接続できるほか、WSLに...

MySQL ルートパスワードをリセットする方法

目次1. ルートパスワードを忘れてしまい、データベースにアクセスできない: DBA にとって、スーパ...

CentOS 6.4 で rpm を使用して MySQL をオフラインでインストールする

rpmインストールパッケージを使用してmysqlをオフラインでインストールします。参考までに準備:公...

よく使われるシングルページアプリケーションウェブサイト共有

CSS3お願いしますこのウェブサイトを自分で見て、パラメータを変更し、CSS3効果をオン/オフにする...

Antd+vueは円形属性フォームの動的検証のアイデアを実現します

必要な項目をループして検証するために、クエリ フォームのいくつかのプロパティを実装したいと考えていま...

Ubuntu16.04にclionをインストールするプロセス全体と手順の詳細な説明

CLion のプロセス全体を最初から説明します。CLion は、JetBrains がリリースした新...

Linux ipcsコマンドの使用

1. コマンドの紹介ipcs コマンドは、Linux のプロセス間通信機能の状態を報告するために使用...

HTML でよく使用されるエスケープ文字の概要

HTML でよく使用されるエスケープ文字をまとめると次のようになります。 &nbsp; 改行...

WeChatアプレットのスワイパードットのドットをスライダーに変更する方法

目次背景ターゲット効果アイデア成し遂げるスワイパーは変更を聞きますカスタムドットモジュール変更イベン...

mysql data_dirの変更によって発生するエラー問題を解決する

今日は、新しく購入した Alibaba Cloud ECS 環境 (Ubuntu 16.04 LTS...

CSS 透明ボーダー背景クリップマジック

この記事では、CSSの透明な境界線の背景クリップの素晴らしい使い方を主に紹介し、みんなと共有し、自分...

MySQL ベストプラクティス: パーティションテーブルの基本タイプ

MySQL パーティションテーブルの概要MySQL の人気が高まるにつれて、MySQL に保存される...

Vueは小さなメモ帳機能を実装しました

この記事の例では、メモ帳の小さな機能を実現するためのvueの具体的なコードを参考までに共有しています...

CentOS 6.8 に MySQL 8.0.18 をインストールするチュートリアルの簡単な分析 (RPM 方式)

今日は、CentOS 6.8 サーバーに MySQL 8.0.18 をインストールする方法を記録しま...