画像や動画を全画面にフィットさせて中央に表示する

内容に広告・プロモーションを含みます
画像や動画を全画面にフィットさせて中央に表示する
  • URLをコピーしました!

こちらの記事は古くなっています。同じことをCSSだけでもできます。ぜひ下記の記事もチェックしてみてください。

以前、「ボックスの高さをブラウザの高さに合わせるテク3つ!」というのを書きました。

本当は今回の記事の内容まで一気に行きたかったのですが、長くなるので分けることにしました。
ですので今回は、続編でブラウザの高さに合わせたボックス内で、画像や動画を全画面にフィットさせる方法をやっていきたいと思います。

これができれば、最近良く見るブラウザ全体にフィットした背景動画のサイトも作れます。

この記事を書いた人
  • フリーランスWEBクリエイターとして10年の活動実績。WEB制作歴トータル17年。
  • 要件定義からデザイン・コーディングまで全て担当。
  • Webサイト、LPの制作数、延べ100サイト以上。
  • 個人での売上1300万円超えを機に法人化
  • 現在は株式会社Spring DAY代表、兼クリエイティブディレクターとして現役活動中
かすがです
目次

CSSのバックグラウンドで実装

これが一番簡単な方法です。「background-size」プロパティで設定します。

background: url(../images/mainvisual.jpg) no-repeat center;
background-size: cover;

たった2行ですので簡単ですね。ブラウザの幅や高さを色々変えても常に背景画像が見切れることなくフィットします。

しかし、動画はそもそも「background」プロパティで設定できません。画像も背景画像ではなく「img」タグで配置したい場合もあると思います。

そこで、jQueryで「background-size: cover;」と同じように画像や動画をフィットさせていきたいと思います。

jQueryで実装

まずはサンプルから見てみましょう。

CSSの「background-size: cover;」と表示のされ方は変わらないですが、画像は「img」タグで配置しています。

HTML

<div class="box">
    <img class="fitImg" src="images/mainvisual.jpg" alt="">
    <div class="box__centered">
        <div class="box__contents">
            <h2 class="box__title">WEBDESIGNDAY</h2>
            <P class="box__text">
            MORE GOOD DESIGN<br>
            MORE INSPIRATION<br>
            MORE AND MORE                   
            </P>
        </div><!--box__contents-->
    </div><!--box__centered-->                     
</div><!--box-->

画像に「fitImg」クラスをつけました。こちらにjQueryで画面にフィットさせる処理をします。

CSS

.fitImg{
    position: absolute;
}

画像の拡大や位置の指定はjQueryで設定しますので、画像のCSSはこの1行のみです。

jQuery

var winH = $(window).height();
$('.box').outerHeight(winH);
 
$(window).on('load',function(){
    setBgImg($('.fitImg'));
});
 
$(window).on('resize',function(){
    winH = $(window).height();
    $('.box').outerHeight(winH);
    setBgImg($('.fitImg'));
});
 
function setBgImg(object){
    //画像サイズ取得
    var imgW = object.width();
    var imgH = object.height();
 
    //ウィンドウサイズ取得
    var winW = $(window).width();
    var winH = $(window).height();  
 
    //幅・高さの拡大率取得
    var scaleW = winW / imgW;
    var scaleH = winH / imgH;
 
    //幅・高さの拡大率の大きいものを取得
    var fixScale = Math.max(scaleW, scaleH);
 
    //画像の幅高さを設定
    var setW = imgW * fixScale;
    var setH = imgH * fixScale;
 
    //画像の位置を設定
    var moveX = Math.floor((winW - setW) / 2);
    var moveY = Math.floor((winH - setH) / 2);
 
    //設定した数値でスタイルを適用
    object.css({
        'width': setW,
        'height': setH,
        'left' : moveX,
        'top' : moveY
    });     
}

1,2行目 「ボックスの高さをブラウザの高さに合わせるテク3つ!」でやったとおり、高さをブラウザの高さに合わせています。

15行目 今回は「setBgImg」という関数を作りました。

簡単に説明すると画像や動画に「setBgImg」を使うだけです。
「setBgImg(object)」の「object」に画像や動画を入れます。

5,12行目 ロードが完了したタイミングと、ブラウザがリサイズされたタイミングで「setBgImg($('.fitImg'));」として関数を実行します。

関数をざっくり説明すると、28行目の「fixScale」に幅と高さの拡大率の大きい方を入れます。これで画像の拡大が必ずブラウザのサイズより大きくなり、見切れることがなくなります。

これだけだと拡大はできますが、位置がセンターになりません。
なので、35行目,36行目でブラウザからはみ出した画像や動画の数値の半分を計算して、その分移動させてセンターに配置しています。

タイトルに「動画」もうたっておりますので、動画バージョンのサンプルもご確認ください。
「img」の部分を「video」タグに変更しただけです。

動画は下記からダウンロードしました。

Free stock videos – Pexels Videos

WEBデザイナー・フロントエンドのスキルを確実に身につけたい方へ

「WEBデザインやフロントエンドを学びたい」と思い立ったとき、多くの方がまず独学を選びます。

しかし、独学では「何をどこから学べばいいかわからない」「つまずいたときに誰にも聞けない」といった壁にぶつかることも少なくありません。

一方、スクールで学べば、正しい順序で、現場で使えるスキルを効率よく習得することができます。最短ルートでスキルを身につけたい方には、スクール学習がおすすめです。

かすが

私は26歳で印刷業からWEBデザイナーを目指して学び始めましたが、やはり独学に限界を感じ短期スクールで学びました。本気でスキルを身につけたいならスクールはマジで行った方が良いです!

スクールで学ぶ5つのメリット
  • カリキュラムが体系化されているため、基礎から応用まで無駄なく学べる
  • 現役のプロから実践的なフィードバックを受けられる
  • わからないことをすぐに質問・解決できる環境がある
  • 制作課題を通じて、ポートフォリオが作成できる
  • 学習仲間や講師とのつながりが、モチベーション維持につながる
スクール選びでチェックすべき5つのポイント
  • カリキュラムが現場で必要とされる技術に対応しているか
  • 現役デザイナー・エンジニアが講師として在籍しているか
  • ポートフォリオ制作のサポートが充実しているか
  • 卒業後の就職・転職支援が用意されているか
  • オンライン・通学など、自分の生活スタイルに合った受講形式

遠回りせず、確実にスキルを身につけたいなら、プロに教わるのが一番の近道です。

WEBデザイナー・フロントエンドエンジニアとして一歩踏み出したいあなたにぴったりのスクールを、下記の記事でご紹介しています。ぜひチェックしてみてください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次