WordPressテーマは、多くのテーマがレスポンシブに表示できるようになっていますが、意外ととサポートされていないのが、ビデオなどのレスポンシブ設定です。
Twenty fifteenで、みてみましょう
ブラウザビューが1600pxの時には、660px x 495px で表示されるYoutubeビデオをブラウザ幅を小さく変更してそのサイズを見てみると、530px x 495px という風に幅方向は、ビュー幅に追従しますが、高さは 一定のままです。
Youtube 等、Oembed メディアのレスポンシブ対応は、現状 https://wordpress.org/themes/stargazer/(Stargazer) 等 ごく限られたテーマでしか、実装されていません
今回は、動画のレスポンシブ設定について考えてみたいと思います。レスポンシブ対応の方法
jQueryから、アプローチ
Currently Supported Players
YouTube Y Vimeo Y Blip.tv Y* Viddler Y* Kickstarter Y* * means native support for these may be deprecated.
If your video platform is not currently supported, try adding it via a customSelector…
fitvids.jsを使っているテーマ
- https://ja.wordpress.org/themes/blogbox/(blogbox)
このテーマを使って、実際に動画がサポート以外のプレイヤーの場合にどのように表示されるかを見てみます。
Youtube
TED
サポートしていない動画の場合は、やはりレスポンシブにはならず、幅方向だけが調整されています。
articleブロック(.hentry)には、白い枠線を追加していますが、枠線からオーバフローしていることも確認できます。
CSSから、アプローチ
https://wordpress.org/themes/raindrops/(Raindrops)
Youtube
TED
CSSでの、レスポンシブ設定のベースになる考え方
padding―bottom に、アスペクト比を設定して、heightを0にしてしまう。
この設定を行うと、一定のアスペクト比でブロックを表示することが出来ます。
同様の考え方が、
等で紹介されています。
CSS Tricksでは、jQueryで、ブラウザのリサイズを検知して、レスポンシブな動画の表現の例が記述されていますが、
Raindropsテーマの場合、以下のようなフィルタとスタイルの組み合わせで、レスポンシブ対応しています。
add_filter( 'embed_oembed_html', 'raindrops_oembed_filter', 99, 4 );
if ( !function_exists( 'raindrops_oembed_filter' ) ) {
/**
*
* @param type $html
* @param type $url
* @param type $attr
* @param type $post_ID
* @return type string html
* @since 1.246
*/
function raindrops_oembed_filter( $html, $url, $attr, $post_ID ) {
global $is_IE;
if ( ! $is_IE ) {
$html= str_replace( 'frameborder="0"', '', $html );
}
// 以下の行は、Raindrops 特有の設定なので 必要ありません
//$element= raindrops_doctype_elements( 'div', 'figure', false );
// div figure等を指定してください。
$element= 'figure';
if ( !preg_match( '!(twitter.com |tumblr.com)!', $url ) ) {
return sprintf( '<%2$s class="oembed-container clearfix">%1$s</%2$s>', $html, $element );
}
return $html;
}
}
embed[src^="http://www.youtube.com/"],
embed[src^="http://v.wordpress.com/"],
embed[src^="//v.wordpress.com/"],
a[href^="https://www.flickr.com/"] img,
iframe[src^="https://embed-ssl.ted.com/"]{
margin:auto;
display:block;
max-width:100%;
max-height:100%;
min-width:160px;
}
.oembed-container {
position: relative;
padding-bottom: 56.25%;
padding-top: 30px;
height: 0;
}
.oembed-container .issuuembed{
clear:both;
max-height:100%;
}
.oembed-container iframe {
border:none;
}
.oembed-container{
margin:0;
}
.oembed-container iframe,
.oembed-container object,
.oembed-container embed {
position: absolute;
top: 0;
left: 0;
width: 100%;
width: -webkit-calc(100% - 2px);
width: calc(100% - 2px);
height: 100%;
min-width:160px;
}
.oembed-container + *{
margin-top:1em;
}
ただ、レインドロップステーマの場合、動画が常にコンテンツ幅いっぱいに表示されてしまいます。
でかすぎんじゃないの という場合は
Youtube 等の動画メディア(OEMBEDメディア)のサイズをコントロールする方法 を参照してください。
https://youtu.be/dpcHPVpjBCM
videoのレスポンシブ対応してみませんか?



