YouTubeなどの動画を埋め込む際、そのまま貼り付けるとスマホなどモバイルで表示した際にはみ出てしまいます。テーマによっては、レスポンシブに対応しているかと思いますが、自作した場合などはこのような対応が必要になります。
投稿時に貼り付けたiframeにdivを付与
function iframe_in_div($the_content) {
if ( is_singular() ) {
$the_content = preg_replace('/<iframe/i', '<div class="youtube"><iframe', $the_content);
$the_content = preg_replace('/<\/iframe>/i', '</iframe></div>', $the_content);
}
return $the_content;
}
add_filter('the_content','iframe_in_div');
投稿内容を表示するthe_content();にiframeがあった場合class=“youtube”を自動的にdivで囲ってくれます。
HTMLではこのように表示。
<div class="youtube">
<iframe src="#"></iframe>
</div>
CSSはこんな感じで指定。
.youtube {
position: relative;
width: 100%;
padding-top: 56.25%;
}
.youtube iframe{
position: absolute;
top: 0;
right: 0;
width: 100%;
height: 100%;
}
サンプルではYoutubeのアスペクト比16:9になるので、padding-topを9÷16×100=56.25%と計算しないといけません。 スマートではないし面倒ですね。
aspect-ratioでシンプルにアスペクト比を指定
このサイトでも同様にしてあるのですが、もっとシンプルにしたいですよね。※現在は下記内容に修正済み。
ここからが今回の本題。 aspect-ratioを使用すればもっと簡単にアスペクト比を指定できます。
.youtube {
aspect-ratio: 16 / 9;
}
.youtube iframe{
width: 100%;
height: 100%;
}
aspect-ratio: 16/9; これで16:9のアスペクト比で指定されます。 safariの対応が遅かったこともあり使用を見送ってましたが、現在はモダンブラウザにすべて対応しています。
参考としてYouTubeの動画を貼ってみます。 {{< youtube id=“BvYvQAabilQ” >}}
ブラウザのサイズに合わせて表示されているかと思います。
シンプルなコードが使えるようになってくると、不具合が出た場合も対応が楽になりますね。 前に覚えた知識を当たり前だと思わず、常にアップデートしていきましょう!
