🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

1024閲覧

サイズ不定の画像や動画を画面サイズ目一杯に貼り付けたい

TakamiChie

総合スコア59

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2021/01/22 03:55

前提・実現したいこと

(なるべくであれば)CSSのみを使って、画像や動画を常に画面サイズ目一杯に貼り付けたいと思っています。

画像や動画については外部から指定しますので、サイズは不定です。

このことから、次の二つの問題が出てきます。

  1. 画面領域よりおおきいサイズの画像または動画が指定されたときは、画面サイズ目一杯まで縮小する
  2. 画面領域よりちいさいサイズの画像または動画が指定されたときは、画面サイズ目一杯まで拡大する

発生している問題

あちこちのサイトの例を探して、なんとか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 ビット)
※ 配信用の画面に用いるという性質上、当面は他のブラウザはサポート対象外として考えています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

【object-fit - CSS: カスケーディングスタイルシート | MDN】
https://developer.mozilla.org/ja/docs/Web/CSS/object-fit

【1行追加でOK!CSSだけで画像をトリミングできる「object-fit」プロパティー | Webクリエイターボックス】
https://www.webcreatorbox.com/tech/object-fit

投稿2021/01/22 04:24

kei344

総合スコア69596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TakamiChie

2021/01/22 06:00

object-fit!そんなプロパティがあるのですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問