CSSやJavaScriptでスクロールバーの横幅を取得する方法

コーディングをしていて、スクロールバー自体の横幅を取得したいときがあったので、取得方法についてまとめておきます。
macOSで常にスクロールバーが表示されるようにする
macOSでは設定によってはスクロールバーが表示されないこともあります。
[システム環境設定]→[一般]の「スクロールバーの表示」で変更できます。
![[システム環境設定]→[一般]の「スクロールバーの表示」](https://webrandum.net/mskz/wp-content/uploads/2022/05/image_1-2.png)
スクロールバーの幅を取得する
1. CSSで取得する方法
スクロールバーが表示されている場所がページ全体に対しての場合は、下記の記述で取得できます。
calc(100vw - 100%);100vwはビューポートの横幅全体が取れるのでスクロールバーを含む横幅、100%はbodyタグの横幅100%が取得できるのでスクロールバーを含まない横幅が取得できます。
それらの差をcalcで計算して取ることでスクロールバーの取得ができます。
100vwはビューポートの横幅になるので、ページ全体に対してのスクロールバーに対してのみしか使用できません。
2. JavaScriptのinnerWidthとclientWidthで取得する方法
JavaScriptを使う方法もあり、下記のようにinnerWidthとclientWidthの差を取得するだけです。
let scrollbarWidth = window.innerWidth - document.body.clientWidth;
console.log(scrollbarWidth);3. JavaScriptのoffsetWidthとclientWidthで取得する方法
例えば、テーブルのスクロールバーなど、ページ全体ではなく特定要素に対してのスクロールバーの横幅を取得したい場合は下記の特定要素のclientWidthとoffsetWidthの差を取得します。
let table = document.querySelectorAll('.table_scroll .table_main');
if(table[0]){
let clientWidth = table[0].clientWidth;
let offsetWidth = table[0].offsetWidth;
let scrollbarWidth = offsetWidth - clientWidth;
console.log(scrollbarWidth);
}スクロールバーの幅を取得したいことはあまりありませんが、簡単に取得できますし、ページ全体であればCSSだけでも可能なので「こういう方法がある」と覚えておくと役に立ちそうです。

CSS疑似要素の「:empty」でタグの中身が空のときのスタイルを設定する
PS Auto Sitemapを使って自分のブログのサイトマップを作成する
JetpackでのError during WebSocket handshakeの解決方法
WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
JavaScriptのtest関数と正規表現でバリデーションチェックを行う
Visual Studio Codeの「Debugger for Chrome」でJavaScriptのデバッグを行う
Movable TypeでMTLoopを使ってkeyでソートしたときに、10個以上表示させると並びがおかしくなる
Bracket Pair ColorizerでVisual Studio Codeの括弧を色分けして見やすくする
「epel-release」インストール後にyum installで「Cannot retrieve metalink for repository」と表示される場合の対処法
WordPressで作成した記事をSlackでシェアしたときに、抜粋文が長く表示される場合の対処法
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
AirPodsで片耳を外しても再生が止まらないようにする方法
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう
Macでアプリごとに音量を調節できるアプリ「Background Music」
Macのターミナルでパスワード付きのZIPファイルを作成する方法
MacBook Proでディスプレイのサイズ調整をして作業スペースを広げる
SteerMouseの「自動移動」機能で保存ダイアログが表示されたら自動でデフォルトボタンへカーソルを移動させる
iPhoneでタッチが一切効かなくなった場合に強制再起動する方法