Youtube などの動画サイトにある 16:9 の比率の動画を埋め込んだ時に、レスポンシブ対応する方法です。
コード
iframe を.movie
クラスを付与した要素でラップします。
HTML
<div class="movie">
<iframe .../>
</div>
CSS
.movie {
position: relative;
width: 100%;
padding-top: 56.25%;
}
.movie iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}
iframe を absolute にすると.movie
要素の高さが0になるため、要素が消えてしまいます。
ですが padding-top を指定することで、その高さの分 iframe が表示されるようになります。
なぜ padding-top が 56.25% なのか?
padding-top の%指定は、要素の横幅に対する割合で計算されます。
例を挙げると、横幅 100px の要素に対して、padding-top を 50% に指定した場合、100px の 50% 分なので、padding-top は 50px になります。
今回の埋め込み動画の場合は、縦横比が 16:9 となっていることが多いです。
56.25% という数値は、9 / 16 = 56.25 から算出されています。横幅 16 に対して縦幅が 9 になるように計算されるので、要素の width が可変した分、縦幅もぴったり 16:9 の割合で可変してくれます。
昔よくあった比率である 4:3 にしたければ、3 / 4 = 75% に指定すると良いでしょう。
padding-top: 75%;