youtube動画をレスポンシブで埋め込む場合

参考サイト
design.webclips.jp

基本的にiframeを縦横比をアスペクト比に合わせたボックスで囲う、という形。
CSSでiframeのwidthとheightをボックスに合わせて100%にするので、問題ない。

<style>
.video_wrap {
	width: 100%;
	height: 56.25vw;
	position: relative;
}
.video_wrap iframe {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
}
</style>
<div class="video_wrap">
	<iframe width="560" height="315" src="https://www.youtube.com/embed/KBAyxbTZN5Y" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div>

カスタマイズとしてjavascriptで制御するパターン。
埋め込みたい動画のアスペクト比が2.39:1だかなんだかで、もともと動画の上下に黒帯がついていた。
それをなんとか切り捨てたいので工夫してみた。
参考サイト
techmemo.biz
やり方としては
・2.39:1のボックスを用意
・position:absoluteで16:9のボックスを中に作る(当然はみ出す)
・なので、上に2.39:1との高さの違いを2で割った高さ(黒帯の高さ)をネガティブマージンにする
・動画呼び出しのボックスの高さを16:9で設定する
最後のボックスの高さを16:9に合わせないと、youtubeの動画が自動で縮小されるぽいので。
問題は、これだと動画の再生が背景扱いになる(z-indexがマイナス)なので、一時停止や再生などができない。要検討。

.video_wrap {
	width: 100%;
	height: 42.55vw;
	position: relative;
}
.video_in {
	width: 100%;
	height: 56.25vw;
	position: absolute;
	margin-top: calc(-1 * (56.25vw - 42.55vw) / 2);
}
#video_content {
	position: absolute;
	top: 0px;
	left: 0px;
	width: 100%;
	height: 56.25vw;
	z-index: -1;
}
-->
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
// YouTube Player APIの読み込み
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
 
// プレイヤーを埋め込む場所(IDを指定)
var ytArea = 'video_content';
// 埋め込むYouTube動画のID
var ytID = 'Luf-oPvbIxk'; // https://youtu.be/〇〇〇の〇〇〇

// プレイヤーの埋め込み
function onYouTubeIframeAPIReady() {
  ytPlayer = new YT.Player(ytArea, {
    videoId: ytID,
    playerVars: {
      rel: 0, // 関連動画の非表示
      controls: 0, // プレイヤーコントロールの非表示
      showinfo: 0, // タイトルなどの非表示
      modestbranding: 1, // YouTubeロゴの非表示
      iv_load_policy: 3, // アノテーションの非表示
      wmode: 'transparent'
    },
    events: {
      'onReady': onPlayerReady,
      'onStateChange': onPlayerStateChange
    }
  });
}
// 動画の準備完了後の動作
function onPlayerReady(e) {
  ytPlayer.playVideo();
  ytPlayer.setPlaybackQuality('default'); // 画質(small・medium・large・hd720・hd1080・highres・default)
}
// 動画再生中と再生後の動作
function onPlayerStateChange(e) {
  var ytStatus = e.target.getPlayerState();
  if (ytStatus == YT.PlayerState.PLAYING) { //再生中
  }
  if (ytStatus == YT.PlayerState.ENDED) { //再生後
    ytPlayer.playVideo();
  }
}

</script>
<div class="video_wrap">
	<div class="video_in">
		<div id="video_content"></div>
	</div>
</div>