ビューポート単位で100vwのスクロールバーを含めてしまう問題を解決できるのか?

こんにちは、ナカムラです。
今回はCSSでよく使われるビューポート単位について、検証したいことがあったので書きたいと思います。

100vhを使った時にアドレスバーの分、意図した高さにならない問題がiOS safariであります。
その対応に使えそうなビューポート単位の紹介がこちらの記事になります。
coliss.com

現在は主要ブラウザで対応されています。 caniuse.com

高さについてにばかり注目していましたが、幅にも使えるのでは?
というのも、幅に100vwを使うとWindows環境ではスクロールバーの幅も含めてしまうため、横スクロールが発生する問題があります。
単位を変えるだけで解決できるならありがたいものです。

DEMO

100%、100vw、100lvw、100svw、100dvwの要素を入れました。

See the Pen Untitled by Nakamura (@takayo-nakamura) on CodePen.

コメントアウトなどで一つずつ表示させてみても結果は同じで、どれも横スクロールが発生します。
スクロールバーの有無はビューポートが変わるわけではないということですね。

ビューポートの概念についてはこちら developer.mozilla.org

それでもvwを使いたい

%でも問題ない時は%を使えば良いですが、2カラムの片方だけウィンドウ幅に合わせて可変するデザイン(写真などを片側幅いっぱいにするなど)だったりすると、親要素に依存する%は使えない場合があります。
※calc関数などを使ってmarginの付け方を左右で分ける方法などもありますが、コンテンツ幅をつけたcontainerクラスなど、できるだけ汎用クラスを使いたいのでvwが使えるととても助かります。

それを解決するには、下記の記事で紹介されている方法があります。
www.6666666.jp

iOS safariで起きていた100vhの問題をjavascriptで解決する方法のvw版になります。
document.documentElement.clientWidthで幅を取得し、1vwに相当するpx数をルートに変数として持たせる手法になります。
あとはCSSで変数を使った書き方にすればWindowsでもスクロール幅に影響されません。

width: calc( var(--vw) * 50 );

最後に

macと同じく上に重なる形のスクロールにしてしまうというのも方法としてはあるかと思います。
デフォルトの状態に慣れているユーザーからすると使いにくくなるので、できるだけ表示領域内でできることで解決したいです。