質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

CSS

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

5915閲覧

モーダルウインドウにYouTubeの動画を埋め込み、かつレスポンシブ対応にしたい。

whoiwhoi

総合スコア48

YouTube

YouTubeとはユーザーがビデオをアップロード・共有・閲覧できるビデオ共有ウェブサイトです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

CSS

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

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2020/02/09 13:05

編集2020/02/09 13:11

前提

ボタンをクリックすることで、YouTubeの動画を埋め込んだモーダルウインドウを表示する機能を作成しています。
下記は動作サンプルです。
サンプル

YouTube動画の下にある閉じるボタンを押すか、動画とボタン以外の領域をクリックすることで、モーダルウインドウが閉じられます。

React.jsとstyled-componentsを使用しています。

埋め込んだ動画のレスポンシブ設定は下記ページを参考にしました。
Youtube 動画の埋め込みをCSSでレスポンシブ対応する方法 - HAM MEDIA MEMO

発生している問題

画面が横長の場合かつ縦横比によってはモーダルウインドウの上下が画面外へはみ出してしまいます。

問題が発生している状態の画像を下記に貼ります。
下記画像の状態は、codesandboxのBrowserタブを新規ウィンドウで表示し、Chromeのデベロッパーツールのデバイスをシミュレーションできるツールで確認しました。
イメージ説明
イメージ説明

実現したいこと

縦横比を維持したまま、モーダルウインドウが画面外へはみ出さないようにしたいです。

実現したいことが実装できた場合、前述の問題が発生する縦横比のケースではモーダルウインドウの縦サイズに合わせて横サイズが縮むかと思いますが、縦横比の維持を優先したいです。

該当のソースコード

jsx

1export default function Modal({ setOpen }) { 2 return ( 3 <ModalWrap> 4 <ModalBackground onClick={() => setOpen(false)} /> 5 <VideoWrap> 6 <iframe 7 width="560" 8 height="315" 9 src="https://www.youtube.com/embed/mxK8b99iJTg" 10 frameBorder="0" 11 allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" 12 allowFullScreen 13 title="modal" 14 /> 15 </VideoWrap> 16 <CloseButton onClick={() => setOpen(false)}>close</CloseButton> 17 </ModalWrap> 18 ); 19} 20 21const ModalWrap = styled.div` 22 position: fixed; 23 top: 0; 24 left: 0; 25 width: 100vw; 26 height: 100vh; 27 box-sizing: border-box; 28 padding: 10%; 29 display: flex; 30 flex-direction: column; 31 align-items: center; 32 justify-content: center; 33`; 34 35const ModalBackground = styled.div` 36 position: fixed; 37 top: 0; 38 left: 0; 39 width: 100vw; 40 height: 100vh; 41 background: rgba(100, 150, 100, 0.5); 42`; 43 44const VideoWrap = styled.div` 45 position: relative; 46 padding-bottom: 56.25%; 47 width: 100%; 48 iframe { 49 position: absolute; 50 top: 0; 51 left: 0; 52 width: 100%; 53 height: 100%; 54 margin-bottom: 1rem; 55 } 56`; 57 58const CloseButton = styled.button` 59 z-index: 1; 60`;

試したこと

動画と閉じるボタンを含んだdiv要素にmax-heightを設定することで、上下のはみ出しを防げるかと思いmax-height: 90vh;max-height: 90%;を設定してみたのですが、効きませんでした。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ページ拝見しました。
スタイルを修正すれば解決できそうです。
ModalWraprightmarginmax-widthの3つのスタイルを追加すればOKだと思います。
スタイルを追加したコードは以下です(max-widthの値はお好みでどうぞ)。

jsx

1const ModalWrap = styled.div` 2 position: fixed; 3 top: 0; 4 left: 0; 5 right: 0; 6 margin: auto; 7 width: 100vw; 8 max-width: 196vh; 9 height: 100vh; 10 box-sizing: border-box; 11 padding: 10%; 12 display: flex; 13 flex-direction: column; 14 align-items: center; 15 justify-content: center; 16`;

【解説】
max-heightが効かなかった原因は、iframeの親要素(VideoWrap)がpadding-bottomを使って高さを指定しているためです。
paddingはパーセントを指定すると親要素の幅を基準に計算してくれるプロパティです。
paddingは要素の高さにも影響するのですが、heightとは別の値として扱われるのでmax-heightを指定しても効かない、という特徴もあります。

そこで高さの代わりにmax-widthで親要素の幅を制限することで、幅を基準に計算するpadding-bottomの値を制限しています。

投稿2020/03/10 08:39

編集2020/03/10 08:42
KimTom

総合スコア134

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

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

whoiwhoi

2020/03/15 11:53

お礼が遅れてしまい申し訳ありませんでした。ご教示いただいたコードで希望通りのスタイルが適用できました。本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問