background-sizeをシミュレート:<video>または<img>のカバー


154

どのように私はの機能をシミュレートできるbackground-size:coverようなHTML要素の上<video>または<img>

次のように機能させたい

background-size: cover;
background-position: center center;

1
わかりました。background-size:coverを使用したことはありません。しかし、私はそれをオンラインで見たので、ウィンドウがサイズ変更したときにサイズ変更するフルスクリーンの画像/ビデオを作成する方法が必要ですか?
Lennart、2012年

はい、ただしには微妙な点がありますcoverリンクの背景サイズ101を参照してください
セロン2012年

わかりましたので、画像/ビデオの100%の幅を単純化し、オーバーフローがある場合はそれがカットされますか?これが必要な場合は、それをコーディングできるかどうかを確認できますが、ビデオの場合は、ほとんどのブラウザではコントロールがプレーヤーの下部にあり、そこにあると切り取られるため、カスタムプレーヤーが必要になることに注意してください。オーバーフローです...
レナルト

はい、反対側でも同様にオーバーフローします。ビデオコントロールの問題を認識しています。
セロン2012年

1
ウィンドウが画像よりも高い場合は、縦軸のどこかに空きスペースができると思います。このような場合、画像は代わりに側面でオーバーフローし、高さはウィンドウと同じになります。また、ウィンドウが画像よりも広い場合は、逆になります。
セロン2012年

回答:


142

これは私がしばらく髪を抜いたものですが、スクリプトを使用せずに5行のCSS(セレクターとブラケットを数えると9)でビデオの完璧なカバーシミュレーションを達成できる素晴らしいソリューションに出会いました。 )。これには、CSS3互換性を除いて、完全に機能しないエッジケースがありません

ここで例を見ることができます

ティモシーのソリューションの問題は、スケーリングが正しく処理されないことです。周囲の要素がビデオファイルよりも小さい場合、縮小されません。動画タグに16px x 9pxのような小さな初期サイズを指定しても、最終auto的にはネイティブファイルサイズの最小値に強制されます。このページで現在トップ投票されているソリューションでは、ビデオファイルを縮小して大幅なズーム効果をもたらすことは不可能でした。

ただし、ビデオのアスペクト比がわかっている場合(16:9など)、次の操作を実行できます。

.parent-element-to-video {
    overflow: hidden;
}
video {
    height: 100%;
    width: 177.77777778vh; /* 100 * 16 / 9 */
    min-width: 100%;
    min-height: 56.25vw; /* 100 * 9 / 16 */
}

ビデオの親要素がページ全体をカバーするように設定されている場合(などposition: fixed; width: 100%; height: 100vh;)、ビデオもカバーします。

ビデオも中央揃えにする場合は、確実な中央揃えアプローチを使用できます。

/* merge with above css */
.parent-element-to-video {
    position: relative; /* or absolute or fixed */
}
video {
    position: absolute;
    left: 50%; /* % of surrounding element */
    top: 50%;
    transform: translate(-50%, -50%); /* % of current element */
}

もちろん、vwvh、とtransformあなたが必要がある場合に、CSS3あるくらい古いブラウザとの互換性を、スクリプトを使用する必要があります。


3
これが最良の答えです。JavaScriptはなく、純粋なCSSは正しくスケーリングされ、中央に配置されます。
mark.monteiro 2016年

6
ああ男。これが2016年の答えです。その他はすべて無視してください。
ジョシュバーソン

これが機能する理由を説明してもらえますか?頭を包むことはできません。何をすべきかvhvw何をしなければなりませんか?
commonpike

1
@insidesin:フィドルを投稿しますか?
M-Pixel 2016年

1
2020年に、最善の解決策は、オブジェクト・フィットです:カバー、ダニエル・デ・ウィットによって答えで説明したように
ブレットドナルド

128

jsFiddle

画像には背景カバーを使用するのが適切で、幅は100%です。これらはには最適ではなく<video>、これらの回答は非常に複雑です。全幅のビデオ背景を実現するためにjQueryやJavaScriptは必要ありません。

私のコードはカバーカバーのようなビデオで背景を完全にカバーするのではなく、アスペクト比を維持し、バックグラウンド全体をカバーするために必要な大きさでビデオを作成することに注意してください。余ったビデオはページの端からはみ出します。どちらの端がビデオを固定するかによって異なります。

答えは非常に簡単です。

このHTML5ビデオコード、またはこれらの行に沿ったものを使用してください:(フルページでテスト)

html, body {
  width: 100%; 
  height:100%; 
  overflow:hidden;
}

#vid{
  position: absolute;
  top: 50%; 
  left: 50%;
  -webkit-transform: translateX(-50%) translateY(-50%);
  transform: translateX(-50%) translateY(-50%);
  min-width: 100%; 
  min-height: 100%; 
  width: auto; 
  height: auto;
  z-index: -1000; 
  overflow: hidden;
}
<video id="vid" video autobuffer autoplay>
  <source id="mp4" src="http://grochtdreis.de/fuer-jsfiddle/video/sintel_trailer-480.mp4" type="video/mp4">
</video>

min-heightとmin-widthにより、ビデオはビデオの縦横比を維持できます。これは通常、通常の解像度での通常のブラウザーの縦横比です。過剰なビデオはページの端からはみ出します。


2
これは他の答えよりもはるかに簡単で、私にとってはうまくいきます。ただ設定するmin-widthmin-height、トリックを行います。
Ryan Burney 2013

31
このソリューションは、カバーのようにビデオを中央に配置しません。
湿地帯

1
初心者が髪を引っ張らないようにするためのコメント:#video_background {は#videobackground {にしてください。
カラビノ2013年

21
これはビデオをまったく縮小しません(1つは拡大しようとしませんでした)。これは、ブラウザーウィンドウが小さく、ビデオが大きい場合に多くの問題を引き起こします。つまり、基本的にはbackground-size:coverの裁ち落とし部分のみを処理し、スケーリング部分は処理しません。
Kevin Newman

4
現在のテクノロジーでは、これは受け入れられる答えになるはずです。CSSソリューションはJavaScriptソリューションよりも望ましいです。parentNodeを適切に設定する必要がありますが。ビデオを中央に配置するには、これを使用しますposition: absolute; left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%);
Sjeiti

100

使用できるブラウザによっては

object-fit: cover;

http://caniuse.com/object-fit


15
これは非常に強力な宣言であり、ブラウザーがそれを採用した場合、Webサイトのスケーリングに伴う多くの問題に終止符が打たれるでしょう。
マイクコルメンディ2014年

1
これがまさに私が探していたものです!
Peter_Fretter 2014年

3
それをサポートしない(まだ)ブラウズ用のポリフィルがあります:github.com/anselmh/object-fit
creimers

7
同様に適用する必要がありましたheight: 100%; width: 100%;。この最新の回答に感謝
ジョセフハルシュ

私はこれに基づいて例と情報を使って答えを出しました。この機能を指摘していただきありがとうございます!
aloisdgがcodidact.comに移動2016年

43

これが私がこれをした方法です。実際の例はこのjsFiddleにあります。

var min_w = 300; // minimum video width allowed
var vid_w_orig;  // original video dimensions
var vid_h_orig;

jQuery(function() { // runs after DOM has loaded

  vid_w_orig = parseInt(jQuery('video').attr('width'));
  vid_h_orig = parseInt(jQuery('video').attr('height'));
  $('#debug').append("<p>DOM loaded</p>");

  jQuery(window).resize(function () { resizeToCover(); });
  jQuery(window).trigger('resize');
});

function resizeToCover() {
  // set the video viewport to the window size
  jQuery('#video-viewport').width(jQuery(window).width());
  jQuery('#video-viewport').height(jQuery(window).height());

  // use largest scale factor of horizontal/vertical
  var scale_h = jQuery(window).width() / vid_w_orig;
  var scale_v = jQuery(window).height() / vid_h_orig;
  var scale = scale_h > scale_v ? scale_h : scale_v;

  // don't allow scaled width < minimum video width
  if (scale * vid_w_orig < min_w) {scale = min_w / vid_w_orig;};

  // now scale the video
  jQuery('video').width(scale * vid_w_orig);
  jQuery('video').height(scale * vid_h_orig);
  // and center it by scrolling the video viewport
  jQuery('#video-viewport').scrollLeft((jQuery('video').width() - jQuery(window).width()) / 2);
  jQuery('#video-viewport').scrollTop((jQuery('video').height() - jQuery(window).height()) / 2);

  // debug output
  jQuery('#debug').html("<p>win_w: " + jQuery(window).width() + "</p>");
  jQuery('#debug').append("<p>win_h: " + jQuery(window).height() + "</p>");
  jQuery('#debug').append("<p>viewport_w: " + jQuery('#video-viewport').width() + "</p>");
  jQuery('#debug').append("<p>viewport_h: " + jQuery('#video-viewport').height() + "</p>");
  jQuery('#debug').append("<p>video_w: " + jQuery('video').width() + "</p>");
  jQuery('#debug').append("<p>video_h: " + jQuery('video').height() + "</p>");
  jQuery('#debug').append("<p>vid_w_orig: " + vid_w_orig + "</p>");
  jQuery('#debug').append("<p>vid_h_orig: " + vid_h_orig + "</p>");
  jQuery('#debug').append("<p>scale: " + scale + "</p>");
};
#video-viewport {
  position: absolute;
  top: 0;
  overflow: hidden;
  z-index: -1; /* for accessing the video by click */
}

#debug {
  position: absolute;
  top: 0;
  z-index: 100;
  color: #fff;
  font-size: 12pt;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="video-viewport">
  <video autoplay controls preload width="640" height="360">
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4"type="video/mp4" />
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.webm"type="video/webm" />
    <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.ogv"type="video/webm" />
  </video>
</div>

<div id="debug"></div>


このソリューションはなぜ反対投票されたのですか?すべての意図と目的のために、問題を解決するようです。
1

2
これは、この問題に対して私が見つけた最良の解決策です。ありがとう!
Chaser324 2013年

1
これは、ビデオが大きくウィンドウが小さい場合は問題なく機能しますが、ウィンドウがビデオより大きく、ビデオのアップスケーリングが必要な場合は機能しません。@ Timothy-Ryan-Carpenter(ここで答えます)からのミニトリックをビデオタグに追加しました:video { min-width: 100%; min-height: 100%; }それは魅力のように機能します。
Alexandre DuBreuil 2014年

私はこのアプローチも有用であるとわかり、興味のある人のためのシンプルなjQueryプラグインとしてパッケージ化しました:github.com/aMoniker/jquery.videocover
Jim Greenleaf

@AlexandreDuBreuilが言っていることにもかかわらず、これはビデオをうまく拡大します(自分で確認してください:fiddle.jshell.net/GCtMm/show)。これは間違いなくここで最高のソリューションです。残念ですが、ここでの他の回答と比較するとJSは非常に重いですが、それbackground-size: coverがビデオに必要な場合に必要なことです。
Chuck Le Butt

14

その他の回答は良かったが、JavaScriptが含まれているか、ビデオを水平方向および垂直方向の中央に配置しない。

この完全なCSSソリューションを使用して、background-size:カバープロパティをシミュレートするビデオを作成できます。

  video {
    position: fixed;           // Make it full screen (fixed)
    right: 0;
    bottom: 0;
    z-index: -1;               // Put on background

    min-width: 100%;           // Expand video
    min-height: 100%;
    width: auto;               // Keep aspect ratio
    height: auto;

    top: 50%;                  // Vertical center offset
    left: 50%;                 // Horizontal center offset

    -webkit-transform: translate(-50%,-50%);
    -moz-transform: translate(-50%,-50%);
    -ms-transform: translate(-50%,-50%);
    transform: translate(-50%,-50%);         // Cover effect: compensate the offset

    background: url(bkg.jpg) no-repeat;      // Background placeholder, not always needed
    background-size: cover;
  }

これは私にはうまくいきませんでした。ビデオがフルスクリーンに拡大されませんでした。この例のHTMLを表示できますか?本体の動画タグだけですか?
マット2014年

本当に素晴らしい解決策。最初はうまくいきませんでしたが、CSSをコピーして貼り付けたときに原因を特定できなかった可能性があります。うまくいきました。ありがとう;)
rafaelbiten

2
私にとってはうまくいきました。位置を変更したばかりです:絶対位置に固定
Assaf Katz

14

Daniel de Witの回答とコメントに基づいて、もう少し検索しました。解決策を提供してくれた彼に感謝します。

解決策はobject-fit: cover;、優れたサポートを持っているものを使用することです(最新のすべてのブラウザがサポートしています)。IEを本当にサポートしたい場合は、object-fit-imagesobject-fitなどのポリフィルを使用できます。

デモ:

img {
  float: left;
  width: 100px;
  height: 80px;
  border: 1px solid black;
  margin-right: 1em;
}
.fill {
  object-fit: fill;
}
.contain {
  object-fit: contain;
}
.cover {
  object-fit: cover;
}
.none {
  object-fit: none;
}
.scale-down {
  object-fit: scale-down;
}
<img class="fill" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="contain" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="cover" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="none" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
<img class="scale-down" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>

と親と:

div {
  float: left;
  width: 100px;
  height: 80px;
  border: 1px solid black;
  margin-right: 1em;
}
img {
  width: 100%;
  height: 100%;
}
.fill {
  object-fit: fill;
}
.contain {
  object-fit: contain;
}
.cover {
  object-fit: cover;
}
.none {
  object-fit: none;
}
.scale-down {
  object-fit: scale-down;
}
<div>
<img class="fill" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="contain" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="cover" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="none" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div><div>
<img class="scale-down" src="http://www.peppercarrot.com/data/wiki/medias/img/chara_carrot.jpg"/>
</div>


1
現代の最良の答え。
Routhinator 2016年

1
これは最新のブラウザを対象とするすべての人にとっての答えです。object-fit: coverおよびwidthを使用しheightて100%に設定すると、中心に比例して拡大縮小imgまたはvideoズームされ、手間がかかりません。
ピップ

13

M-Pixelのソリューションは、ティモシーの答えのスケーリングの問題を解決するという点で優れています(ビデオは拡大されますが縮小されません。そのため、ビデオが本当に大きい場合、その一部がズームされた小さな部分しか表示されない可能性があります)。ただし、そのソリューションは、ビデオコンテナーのサイズに関連する誤った仮定に基づいています。つまり、ビューポートの幅と高さの100%である必要があります。うまくいかないケースをいくつか見つけたので、自分で問題に取り組むことにし、最終的な解決策を考え出したと思います。

HTML

<div class="parent-container">
    <div class="video-container">
        <video width="1920" height="1080" preload="auto" autoplay loop>
            <source src="video.mp4" type="video/mp4">
        </video>
    </div>
</div>

CSS

.parent-container {
  /* any width or height */
  position: relative;
  overflow: hidden;
}
.video-container {
  width: 100%;
  min-height: 100%;
  position: absolute;
  left: 0px;
  /* center vertically */
  top: 50%;
  -moz-transform: translate(0%, -50%);
  -ms-transform: translate(0%, -50%);
  -webkit-transform: translate(0%, -50%);
  transform: translate(0%, -50%);
}
.video-container::before {
  content: "";
  display: block;
  height: 0px;
  padding-bottom: 56.25%; /* 100% * 9 / 16 */
}
.video-container video {
  width: auto;
  height: 100%;
  position: absolute;
  top: 0px;
  /* center horizontally */
  left: 50%;
  -moz-transform: translate(-50%, 0%);
  -ms-transform: translate(-50%, 0%);
  -webkit-transform: translate(-50%, 0%);
  transform: translate(-50%, 0%);
}

また、ビデオの比率に基づいているため、ビデオの比率が16/9以外の場合は、パディングボトム%を変更する必要があります。それ以外は、そのまま使用できます。IE9 +、Safari 9.0.1、Chrome 46、Firefox 41でテスト済み。

編集(2016年3月17日)

この回答を投稿してbackground-size: coverからbackground-size: contain<video>要素と要素の両方をシミュレートする小さなCSSモジュールを作成しました:http : //codepen.io/benface/pen/NNdBMj

動画のさまざまな配置をサポートしています(と同様background-position)。また、contain実装は完全ではないことにも注意してください。とは異なりbackground-size: contain、コンテナの幅と高さが大きい場合、ビデオは実際のサイズを超えてスケ​​ーリングされませんが、場合によってはまだ役立つと思います。私はまた、特別な追加したfill-widthfill-heightあなたが一緒に使用できるクラスcontainの特別なミックスを取得するcontaincover...それを試してみると、それを改善して自由に感じます!


これは、ビデオが通常の解像度を超えて拡大縮小されて、何があっても100%の幅/高さに収まるようにはなりません。したがって、「カバー」機能は複製されません。
jetlej 2016年

@jetlejここで行います。どのブラウザでテストしていますか?私のコードペンを見た?
benface

1
Edgeのフォールバックとしてうまく機能しました。乾杯
MrThunder 2016

@MrThunderこれをフォールバックとして使用する場合、メインのソリューションとして何を使用しますか?
benface

1
@ benoitr007 object-fit: coverFFとクローム、およびIEのModernizr を使用したソリューションに使用
MrThunder


4

CSSと小さなjsを使用すると、ビデオが背景を覆い、水平方向に中央揃えになります。

CSS:

video#bgvid {
    position: absolute;
    bottom: 0px; 
    left: 50%; 
    min-width: 100%; 
    min-height: 100%; 
    width: auto; 
    height: auto; 
    z-index: -1; 
    overflow: hidden;
}

JS:(これをウィンドウのサイズ変更にバインドし、個別に1回呼び出します)

$('#bgvid').css({
    marginLeft : '-' + ($('#bgvid').width()/2) + 'px'
})

3

長いコメントセクションの直後、これはあなたが探しているものだと思います。jQueryベースです。

HTML:

<img width="100%" id="img" src="http://uploads8.wikipaintings.org/images/william-adolphe-bouguereau/self-portrait-presented-to-m-sage-1886.jpg">

JS:

<script type="text/javascript">
window.onload = function(){
       var img = document.getElementById('img')
       if(img.clientHeight<$(window).height()){
            img.style.height=$(window).height()+"px";
       }
       if(img.clientWidth<$(window).width()){
            img.style.width=$(window).width()+"px";
       } 
}
​</script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

CSS:

body{
    overflow: hidden;
}

上記のコードはブラウザの幅と高さを使用していますが、div内でこれを行う場合は、次のように変更する必要があります。

Divの場合:

HTML:

<div style="width:100px; max-height: 100px;" id="div">
     <img width="100%" id="img" src="http://uploads8.wikipaintings.org/images/william-adolphe-bouguereau/self-portrait-presented-to-m-sage-1886.jpg">
</div>

JS:

<script type="text/javascript">
window.onload = function(){
       var img = document.getElementById('img')
       if(img.clientHeight<$('#div').height()){
            img.style.height=$('#div').height()+"px";
       }
       if(img.clientWidth<$('#div').width()){
            img.style.width=$('#div').width()+"px";
       } 
}
​</script>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​

CSS:

div{
   overflow: hidden;
}

また、これはGoogle Chromeのみをテストしたことを述べなければなりません...これはjsfiddleです:http ://jsfiddle.net/ADCKk/


結果フレームのサイズ、またはブラウザーのサイズを変更しても、jsfiddleが何もしないようです。私はこれをChromeで試しました。
セロン

更新しましたが、幅を大幅に減らすと突然ジャンプするという小さな
Lennart

大丈夫、申し訳ありませんが、私は無知です、私は私が混乱していると思う多くのことを試しました、それが可能かどうかはわかりません...上記のスクリプトは、ページを更新して機能させるためにのみ機能しますウィンドウのサイズを変更するときは、jsでwindow.resizeイベントを使用する必要がありますが、それを機能させることはできません。おそらく、その情報を使用すればよいでしょう:)とにかく頑張ってください
Lennart

3

ブラウザーの幅が動画の幅よりも狭い場合、上の答えは動画を縮小しません。次のCSSを使用してみてください(#bgvidが動画のIDです):

#bgvid {
     position: fixed;
     top: 50%;
     left: 50%;
     min-width: 100%;
     min-height: 100%;
     width: auto;
     height: auto;
     transform: translateX(-50%) translateY(-50%);
     -webkit-transform: translateX(-50%) translateY(-50%);
}

なぜネガがz-index必要なのですか?
aleclarson

複数のレイヤー化された要素を使用して設計する場合は、役に立ちません。削除しました。
Ramzi Dreessen、

1

私はこの問題を抱えていたので、この解決策も投稿しましたが、他の解決策は私の状況ではうまくいきませんでした...

background-size:cover;要素のbackground-imageプロパティではなく、要素のcssプロパティを適切にシミュレートすると思います。画像の縦横比を現在のウィンドウの縦横比と比較する必要があるため、サイズに関係なく(また、画像が幅よりも高い)ウィンドウは要素がウィンドウを満たしている(そしてそれを中央に配置しているが、それが要件であったかどうかはわからない)。

単純化のために画像を使用しているので、ビデオ要素も問題なく機能すると思います。

最初に要素のアスペクト比を取得し(ロードされたら)、ウィンドウのサイズ変更ハンドラーをアタッチし、初期サイズ変更のために一度トリガーします。

var img = document.getElementById( "background-picture" ),
    imgAspectRatio;

img.onload = function() {
    // get images aspect ratio
    imgAspectRatio = this.height / this.width;
    // attach resize event and fire it once
    window.onresize = resizeBackground;
    window.onresize();
}

次に、サイズ変更ハンドラーで、ウィンドウの現在のアスペクト比を画像の元のアスペクト比と比較して、幅を埋めるか高さを埋めるかを最初に決定する必要があります。

function resizeBackground( evt ) {

// get window size and aspect ratio
var windowWidth = window.innerWidth,
    windowHeight = window.innerHeight;
    windowAspectRatio = windowHeight / windowWidth;

//compare window ratio to image ratio so you know which way the image should fill
if ( windowAspectRatio < imgAspectRatio ) {
    // we are fill width
    img.style.width = windowWidth + "px";
    // and applying the correct aspect to the height now
    img.style.height = (windowWidth * imgAspectRatio) + "px";
    // this can be margin if your element is not positioned relatively, absolutely or fixed
    // make sure image is always centered
    img.style.left = "0px";
    img.style.top = (windowHeight - (windowWidth * imgAspectRatio)) / 2 + "px";
} else { // same thing as above but filling height instead
    img.style.height = windowHeight + "px";
    img.style.width = (windowHeight / imgAspectRatio) + "px";
    img.style.left = (windowWidth - (windowHeight / imgAspectRatio)) / 2 + "px";
    img.style.top = "0px";
}

}


1

このアプローチでは、cssとhtmlのみを使用します。あなたは実際に簡単にビデオの下にdivを積み重ねることができます。サイズ変更時にカバーは中央に配置されません。

HTML:

<html>
<head>
<link rel="stylesheet" type="text/css" href="style.css"> 
</script>
</head>
<body>
<div id = "contain">
<div id="vid">
    <video autoplay>
        <source src="http://www.quirksmode.org/html5/videos/big_buck_bunny.mp4" type="video/mp4" />
    </video>
</div>
</div>
</body>
</html>

CCS:

/*
filename:style.css
*/
body {
    margin:0;
}

#vid video{
position: absolute; 
right: 0; 
top: 0;
min-width: 100%; 
min-height: 100%;
width: auto; 
height: auto; 
}

#contain {
width:100%;
height:100%;
zoom:1%;/*Without this the video will be stretched and skewed*/ 
}

1

@隠しホッブ

この質問には、6日で終了するHidden Hobbesからの+100の評価に値するオープンバウンティがあります。柔軟なCSSのみのソリューションを取得するためのビューポートユニットの独創的な使用。

CSSのみのソリューションに対するこの質問に報奨金を出したので、試してみましょう。このような問題に対する私の解決策は、固定比率を使用してビデオの高さと幅を決定することです。通常はBootstrapを使用しますが、必要なCSSをそこから抽出してそれを機能させません。これは、埋め込みビデオを正しい比率で中心に配置するために以前使用したコードです。それはのために働く必要がある<video><img>要素があまりにもそれはここでは関係ありトップ一つだが、私はすでに彼らが転がっていたので、私もあなたに他の二つを与えました。がんばって!:)

jsfiddleフルスクリーンの例

.embeddedContent.centeredContent {
    margin: 0px auto;
}
.embeddedContent.rightAlignedContent {
    margin: auto 0px auto auto;
}
.embeddedContent > .embeddedInnerWrapper {
    position:relative;
    display: block;
    padding: 0;
    padding-top: 42.8571%; /* 21:9 ratio */
}
.embeddedContent > .embeddedInnerWrapper > iframe {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    height: 100%;
    width: 100%;
    border: 0;
}
.embeddedContent {
    max-width: 300px;
}
.box1text {
    background-color: red;
}
/* snippet from Bootstrap */
.container {
    margin-right: auto;
    margin-left: auto;
}
.col-md-12 {
    width: 100%;
}
<div class="container">
    <div class="row">
        <div class="col-md-12">
            Testing ratio AND left/right/center align:<br />
            <div class="box1text">
                <div class="embeddedContent centeredContent">
                    <div class="embeddedInnerWrapper">
                        <iframe allowfullscreen="true" allowscriptaccess="always" frameborder="0" height="349" scrolling="no" src="//www.youtube.com/embed/u6XAPnuFjJc?wmode=transparent&amp;jqoemcache=eE9xf" width="425"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            Testing ratio AND left/right/center align:<br />
            <div class="box1text">
                <div class="embeddedContent rightAlignedContent">
                    <div class="embeddedInnerWrapper">
                        <iframe allowfullscreen="true" allowscriptaccess="always" frameborder="0" height="349" scrolling="no" src="//www.youtube.com/embed/u6XAPnuFjJc?wmode=transparent&amp;jqoemcache=eE9xf" width="425"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
<div class="container">
    <div class="row">
        <div class="col-md-12">
            Testing ratio AND left/right/center align:<br />
            <div class="box1text">
                <div class="embeddedContent">
                    <div class="embeddedInnerWrapper">
                        <iframe allowfullscreen="true" allowscriptaccess="always" frameborder="0" height="349" scrolling="no" src="//www.youtube.com/embed/u6XAPnuFjJc?wmode=transparent&amp;jqoemcache=eE9xf" width="425"></iframe>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>


1
@turbopippの回答に感謝しますが、私の報奨金の理由を誤解しているようです。私はそれを既存の回答に授与できるように引き上げました。賞金が24時間アクティブになるまでは、それを許可することができません。それでも、あなたの努力に対して+1は、パディングパーセンテージトリックは、要素が正しいアスペクト比を維持することを保証するための有用な方法です。
隠しホッブ

ああ、まあそれは本当に面倒ではありませんでした、そしてあなたの既存の答えに報奨金を与えることは本当にうれしいです。バウンティシステムについて詳しく読むべきだと思います。:)おかげで
turbopipp 2015

0

ティモシー・ライアン・カーペンターの答えが背景の中央揃えを説明していないというウェットからのコメントに答えるために、私はこの簡単なCSS修正を提供します:cover

CSS:

margin-left: 50%;
transform: translateX(-50%);

これらの2つの線を追加すると、すべての要素が中央に配置されます。さらに良いことに、HTML5ビデオを処理できるすべてのブラウザーはCSS3変換もサポートしているため、これは常に機能します。

完全なCSSは次のようになります。

#video-background { 
    position: absolute;
    bottom: 0px; 
    right: 0px; 
    min-width: 100%; 
    min-height: 100%; 
    width: auto; 
    height: auto; 
    z-index: -1000; 
    overflow: hidden;
    margin-left: 50%;
    transform: translateX(-50%);
}

私はティモシーの答えに直接コメントしたと思いますが、そうするほどの評判はありません。


0

みんな私はそれより短い解決策を持っています、そして私には完璧に機能します。私はそれをビデオに使用しました。そして、それはCSSのカバーオプションを完全にエミュレートします。

JavaScript

    $(window).resize(function(){
            //use the aspect ration of your video or image instead 16/9
            if($(window).width()/$(window).height()>16/9){
                $("video").css("width","100%");
                $("video").css("height","auto");
            }
            else{
                $("video").css("width","auto");
                $("video").css("height","100%");
            }
    });

ifを反転すると、それ以外の場合は包含されます。

そして、これがCSSです。(中央に配置したくない場合は使用する必要はありません。親divは " position:relative "である必要があります)

CSS

video {
position: absolute;
-webkit-transform: translateX(-50%) translateY(-50%);
transform: translateX(-50%) translateY(-50%);
top: 50%;
left: 50%;}

0

私はこれを解決して共有したかっただけです。これはBootstrap 4で動作します。動作しますimgが、ではテストしていませんvideo。これがHAMLとSCSSです

HAML
.container
  .detail-img.d-flex.align-items-center
    %img{src: 'http://placehold.it/1000x700'}
SCSS
.detail-img { // simulate background: center/cover
  max-height: 400px;
  overflow: hidden;

  img {
    width: 100%;
  }
}

/* simulate background: center/cover */
.center-cover { 
  max-height: 400px;
  overflow: hidden;
  
}

.center-cover img {
    width: 100%;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
  <div class="center-cover d-flex align-items-center">
    <img src="http://placehold.it/1000x700">
  </div>
</div>


0

古い質問ですが、誰かがこれを見た場合、私の意見で最良の答えは、ビデオをアニメーションGIFに変換することです。これにより、より多くの制御が可能になり、画像のように扱うことができます。また、動画を自動再生できないため、モバイルで動作する唯一の方法でもあります。私は質問がでそれを行うために求めている知っている<img>タグが、私は実際に使用しての欠点表示されていない<div>とやってbackground-size: cover


これは良いアイデアで、場合によっては試してみる価値があります。唯一の欠点は、*。gifが(私の場合)ファイルサイズが大きいことです。2.5MB * .mpegを16MB * .gifに変換しました。
Henning Fischer、

私も同意します。多くの場合.gif、サイズははるかに大きくなりますが、ぼやけもします。この回答を書いてから私の見方が変わった。それはあなたが両方の長所を組み合わせることができないのは残念です。
D-Marc、

私はモバイル用の(短縮された)* .gifとデスクトップ用の* .mp4になりました。
Henning Fischer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.