home
twitter
ページトップへ
目次
  • 「element.getBoundingClientRect().width」を使うと何ができるのか?
  • 「element.getBoundingClientRect().width」で取得できるもの
  • 「transform」による変化も計算に入れてくれる
  • 小数点以下も含む
  • 「element.getBoundingClientRect().width」の使い方!
  • 実用例!
  • 注意点!
  • 参考リンク!
  • おすすめの再生リスト!
  • まとめ!
about
categories
page
archive
皇帝ペンギンブログ

2025/01/26 (更新日:2025/01/26)

【JavaScript】「getBoundingClientRect().width」の使い方!【要素の幅を取得】

Categories > JavaScriptの入門編
こんばんは!初めましての方は初めまして!
しゅーた(@chibasyuta)です!

この記事では「element.getBoundingClientRect().width」の使い方の解説をします!

「element.getBoundingClientRect().width」を使うと、要素の幅を取得することが可能です。様々な場面で使われることが想定されます。

この記事の内容!

  • 「element.getBoundingClientRect().width」を使うと何ができるのか?
  • 「element.getBoundingClientRect().width」の使い方!
  • 簡単なユースケース
また、下の動画でも「getBoundingClientRect().width」の使い方について詳しく解説しているので、一緒に実際にコードを書きながら学びたい方はこちらをどうぞ!

それでは内容へ入ります!

目次
非表示
  • 「element.getBoundingClientRect().width」を使うと何ができるのか?
  • 「element.getBoundingClientRect().width」で取得できるもの
  • 「transform」による変化も計算に入れてくれる
  • 小数点以下も含む
  • 「element.getBoundingClientRect().width」の使い方!
  • 実用例!
  • 注意点!
  • 参考リンク!
  • おすすめの再生リスト!
  • まとめ!

「element.getBoundingClientRect().width」を使うと何ができるのか?

https://chibasyuta.org/wp-content/uploads/2025/01/what-get-bounding-client-rect-width-js_new.mp4

「element.getBoundingClientRect().width」を使うことで、要素の横幅を取得することができます。

「px」単位で取得することができるのですが、返り値では、単位は省略されます。

また、読み取り専用です。

「element.getBoundingClientRect().width」で取得できるもの

「element.getBoundingClientRect().width」で取得できる値に含まれるものは、下記の通りです。

含まれるもの

  • コンテンツの幅
  • パディング (padding)
  • ボーダー (border)
  • スクロールバーの幅

これらが含まれます。

「transform」による変化も計算に入れてくれる

「transform」プロパティや、「scale」プロパティによって、要素の横幅を変更することができますよね。

この変更も「element.getBoundingClientRect().width」は計算に含んでくれます。

ここが大きな「element.offsetWidth」との違いになります。

「element.offsetWidth」は「scale」プロパティなどによる「見かけ上の要素の幅の変更」は計算に含んでくれません。

小数点以下も含む

「element.getBoundingClientRect().width」を使うと小数点以下の値も含む正確な幅を取得することができます。

それに対して、「element.offsetWidth」では、小数点以下は四捨五入されます。

「element.getBoundingClientRect().width」の使い方!

https://chibasyuta.org/wp-content/uploads/2025/01/what-get-bounding-client-rect-width-js_new.mp4
<div class="container">
  <div class="box"></div>
  <div class="width">要素の幅!</div>
  <button class="w100">100px</button>
  <button class="w200">200px</button>
  <button class="w300">300px</button>
</nav>
@charset "utf-8";

html {
    font-size: 16px;
}
* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}
.container {
    width: 800px;
    margin: 70px auto;
    font-size: 40px;
}
.box {
    width: 300px;
    height: 300px;
    background-color: black;
    transition-duration: 0.3s;
    margin-bottom: 10px;
}
.width {
    margin-bottom: 20px;
}
button {
    border: none;
    cursor: pointer;
    padding: 8px;
    font-size: 30px;
}
button:hover {
    background-color: black;
    color: white;
}
"use strict";

const box = document.querySelector('.box');
const width = document.querySelector('.width');
const w100 = document.querySelector('.w100');
const w200 = document.querySelector('.w200');
const w300 = document.querySelector('.w300');

function checkWidth() {
    width.textContent = box.getBoundingClientRect().width;
}

w100.addEventListener('click', () => {
    box.style.width = "100px";
    setTimeout(checkWidth, 400);
});
w200.addEventListener('click', () => {
    box.style.width = "200px";
    setTimeout(checkWidth, 400);
});
w300.addEventListener('click', () => {
    box.style.width = "300px";
    setTimeout(checkWidth, 400);
});

このように、要素の幅を取得して、それを表示したり、それによって計算をしたりと、多種多様な使い方が想定できます。

実用例!

https://chibasyuta.org/wp-content/uploads/2025/01/use-get-bounding-client-rect-width-js_new.mp4

カルーセルでスライドする幅をスライド1枚分の幅に正確に設定したい場合に、「getBoundingClientRect().width」が役立ちます。

特にスライドの幅が % で指定されている場合、画面サイズを変更するとズレが生じてしまう問題が発生します。これを解決する場面で正確な幅を取得する必要があるので「element.getBoundingClientRect().width」が使える、ということですね。

カルーセルの作り方に関しては、また別の記事で解説するのでそちらをお待ちください!

注意点!

「getBoundingClientRect()」は頻繁に呼び出すとパフォーマンスに影響を与える可能性があります。リサイズイベントなどでは 「debounce」を使うことも検討するといいでしょう!
また、このメソッドは主要なブラウザでサポートされているけど、互換性の確認を推奨するよ!

参考リンク!

仕様書。
https://drafts.csswg.org/cssom-view/#dom-element-getboundingclientrect

MDN。
https://developer.mozilla.org/ja/docs/Web/API/Element/getBoundingClientRect

おすすめの再生リスト!

こちらは僕が制作したYouTubeの再生リスト「JavaScriptの入門編」です。

「JavaScriptの入門編」はWeb制作を勉強している方がJavaScriptに入門する際に知っておきたい情報をまとめたコンテンツとなります。

こちらの再生リストで「JavaScript」について「丁寧」に解説しているので、もし気になる方はチェックしてみてください!一緒に楽しく学習しましょう!!

まとめ!

「element.getBoundingClientRect().width」を使うと、要素の幅を正確に取得することができます!

  • 返り値は小数点以下も含まれる精度
  • 幅にパディング、ボーダー、スクロールバーも含まれる

特徴!

  • transform や scale の影響も反映
  • なので見かけ上の幅変更も考慮される(offsetWidth との違い)
  • 頻繁に呼び出すとパフォーマンスに影響
  • リサイズイベントなどでは「debounce」の活用も検討

「element.offsetWidth」との違い!

  • transform や scale の影響も反映
  • なので見かけ上の幅変更も考慮される(offsetWidth との違い)
  • 小数点以下を「element.offsetWidth」は四捨五入されるが、「getBoundingClientRect().width」はそのまま取得
こんな感じですかね!
また、下の動画でも「getBoundingClientRect().width」の使い方について詳しく解説しているので、一緒に実際にコードを書きながら学びたい方はこちらをどうぞ!

それではこんな感じでこの記事を終わります!

またね!

自分のロゴ!

皇帝ペンギン

全力で、書きます。
少しでもお役に立てたら幸いです。
楽しんで読んで下さい 。-_- 。
よろしくお願いします!

x(旧twitter) youtube
Categories
  • トップへ
  • ITパスポート (1)
  • programming (168)
    • CSSのアニメーション編 (26)
    • CSSのグリッドレイアウト編 (1)
    • CSSのセレクター編 (58)
    • CSSのフレックスボックス編 (1)
    • CSSのメディアクエリー編 (7)
    • CSSの基本編 (34)
    • HTMLのformタグ編 (1)
    • HTMLの基本編 (3)
    • JavaScriptの入門編 (30)
    • JavaScriptの基本編 (5)
    • Web制作をする環境を整えよう! (1)
  • Uncategorized (23)
  • VScode (1)
  • おすすめ商品! (1)
  • クラロワ (2)
  • マーケティング (17)
  • 大学生活 (7)
  • 心理学 (9)
  • 映画 (1)
  • 法学 (4)
  • 経済学 (4)
  • 読書 (7)
Pages
  • プライバシーポリシー
  • 免責事項
  • プロフィール
Archive
  • 2025年3月 (1)
  • 2025年1月 (9)
  • 2024年12月 (13)
  • 2024年11月 (5)
  • 2024年10月 (10)
  • 2024年9月 (15)
  • 2024年8月 (5)
  • 2024年7月 (6)
  • 2024年6月 (5)
  • 2024年5月 (10)
  • 2024年4月 (24)
  • 2024年3月 (11)
  • 2024年2月 (6)
  • 2024年1月 (10)
  • 2023年12月 (4)
  • 2023年11月 (3)
  • 2023年10月 (2)
  • 2023年9月 (3)
  • 2023年8月 (6)
  • 2023年7月 (3)
  • 2023年6月 (8)
  • 2023年5月 (2)
  • 2023年3月 (1)
  • 2023年2月 (1)
  • 2022年10月 (2)
  • 2022年9月 (2)
  • 2022年8月 (8)
  • 2022年7月 (2)
  • 2022年6月 (6)
  • 2022年5月 (9)
  • 2022年4月 (2)
  • 2022年2月 (4)
  • 2021年12月 (1)
  • 2021年11月 (4)
  • 2021年10月 (8)
  • 2021年9月 (14)
  • 2021年8月 (6)
  • 2021年6月 (1)
  • 2021年5月 (2)
  • 2021年4月 (1)
  • 2021年3月 (1)
  • 2021年2月 (2)
  • 2020年10月 (1)
  • 2020年7月 (1)
  • 2020年4月 (1)
  • 2020年1月 (1)
  • 2019年12月 (2)
© Copyright Syuta Chiba, 2019 All Rights Reserved.