前提・実現したいこと
(なるべくであれば)CSSのみを使って、画像や動画を常に画面サイズ目一杯に貼り付けたいと思っています。
画像や動画については外部から指定しますので、サイズは不定です。
このことから、次の二つの問題が出てきます。
- 画面領域よりおおきいサイズの画像または動画が指定されたときは、画面サイズ目一杯まで縮小する
- 画面領域よりちいさいサイズの画像または動画が指定されたときは、画面サイズ目一杯まで拡大する
発生している問題
あちこちのサイトの例を探して、なんとか1のみを実現するようなCSSを書くことはできました(該当の要素は常にid="display"のdivの下にid="content"として配置されます)。
css
1#display img, #display video, #display audio{ 2 position: absolute; 3 top: 50%; 4 left: 50%; 5 max-width: 100%; 6 max-height: 100%; 7 transform: translate(-50%, -50%); 8}
ただ、2を同時に実現する方法に全く見当がついていません(コンテンツのサイズが横長なのか縦長なのか分かっていれば、width: 100%
またはheight: 100%
で対応できるのですが)。
試したこと
苦肉の策として、JavaScriptを使って以下のコードを毎秒適用するようにしました。
js
1 let content = document.getElementById("content"); 2 if(content){ 3 let l; 4 let s = false; 5 if(content.naturalHeight == content.naturalWidth){ 6 if(window.innerHeight == window.innerWidth){ 7 s = true; 8 }else{ 9 l = window.innerHeight > window.innerWidth; 10 } 11 }else{ 12 l = content.naturalHeight < content.naturalWidth; 13 } 14 content.style.width = s || l ? "100%" : ""; 15 content.style.height = !s && l ? "" : "100%"; 16 } 17 }
しかしながら、これだけだと横長のウィンドウに横長の画像を指定したときなど、一部の条件下でコンテンツが引き伸ばされてしまうことを確認しています。
確認の工数的にすべての画像・動画をチェックしきれないことからも、計算がこれ以上複雑になると自分としても理解が難しくなるという点からも、なるべくならCSSだけで同様のことができないか と考えています。
ソースコード全文
弊NPOのリポジトリで運用しているCastBackgroundというプログラムの一部です。
CSSはsrc/index.css
、JavaScriptはsrc/control.js
を一部改変して掲載しています。
補足情報(FW/ツールのバージョンなど)
ブラウザ:Google Chrome バージョン: 88.0.4324.104(Official Build) (64 ビット)
※ 配信用の画面に用いるという性質上、当面は他のブラウザはサポート対象外として考えています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/22 06:00