Youtubeの埋め込み動画をレスポンシブ対応する!【備忘録】
こんにちは。のんです。
今回は備忘録ついでにYoutubeの埋め込み動画のレスポンシブ対応について記事にしようと思います。
私がCSSに触れるのはもしかして初めてかもしれません!
まずは結論
私はこのように対応しています。
<div class="movie_wrap">
<iframe
width="560"
height="315"
src="{$url}"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen>
</iframe>
</div>
.movie_wrap {
position: relative;
width: 100%;
height: 0;
padding-bottom: 56.25%;
overflow: hidden;
}
.movie_wrap iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
youtubeの埋め込み動画とは?
<iframe
width="560"
height="315"
src="{$url}"
title="YouTube video player"
frameborder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen>
</iframe>
のことですね。ご自身のブログやらに埋め込むときに利用している方は多いのではないでしょうか?
iframeの問題点こそレスポンシブ対応していないこと
しかしiframe
ですと、そのままではレスポンシブ対応していません。
width="560"
や、height="315"
とあるようにそのまま貼ると固定長で、スマホのときにはみ出したり、PCのときに小さかったりします。
それを解決するためにiframe
にスタイルを当てたいのですが、単純にiframeに対してwidth: 100%
を当ててもレスポンシブにはなりません。
つまり、iframe
自体の縦横比は固定にしたままレスポンシブにしたいということになりますね
それをするためにはiframe
のサイズは常に100%にする必要があるので、
iframe {
width: 100%;
height: 100%;
}
しかしこれでは縦に長過ぎます。
ここで、登場するのが、ラップですね。
予め、iframeを格納するレスポンシブなコンテナを用意しておいて、そいつに対して常時100%にすれば、レスポンシブ対応できるという考えです。
ですので、iframe
にはposition: absolute;
を追加して、
iframe {
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
}
となります。
更にレスポンシブなコンテナはposition: absolute;
なiframe
を格納するので、position: relative;
を設定した上でレスポンシブなwidth: 100%
を当てて、
.movie_wrap {
position: relative;
width: 100%;
}
また、高さは無くしてheight: 0;
、padding-bottom
で表示範囲を調整します。
ちょうどいい塩梅なのが、padding-bottom: 56.25%;
ですね。
.movie_wrap {
position: relative;
width: 100%;
height: 0;
padding-bottom: 56.25%;
}
最後にoverflow: hidden;
を追加して終了です。
.movie_wrap {
position: relative;
width: 100%;
height: 0;
padding-bottom: 56.25%;
overflow: hidden;
}
最後に
これはyoutubeの埋め込み以外にも使えるテクニックなのでは無いでしょうか?
すでに既出の技術かもしれませんが、備忘録ついでに書いておきました。
最近引っ越しを検討していまして、あまり技術記事が更新できずに申し訳ない...
6月中旬くらいには一段落つくので、それまでお楽しみに!
そのときはよしなに。
.