Webサイトにvideoタグで動画を挿入
Webサイトのページ内の背景に動画を挿入する場合は、videoタグでmp4などの動画ファイルを読み込むことがあります。
この記事では次のような構造のWebサイトで、最初の<section>部分の背景に動画を実装する方法について説明します。
<section class="section">
<h1>content 1</h1>
</section>
<section class="section skyblue">
<h1>content 2</h1>
</section>
このWebサイトの「content 1」の背景にvideoタグで動画を配置したい場合は、以下のようにvideoタグを書いて、「content 1」部分をdivタグで囲って、CSSで位置やサイズを調整するだけで実装できます。
videoタグには「autoplay loop muted」属性を付けて、「自動再生、ループ、消音」状態で再生されるようにします。
<section class="section">
<div class="section-video-inner">
<h1>content 1</h1>
</div>
<video class="video" src="sample.mp4" autoplay loop muted></video>
</section>
<section class="section skyblue">
<h1>content 2</h1>
</section>
body {
margin: 0;
padding: 0;
}
.section {
display: grid;
place-items: center;
position: relative;
z-index: 2;
width: 100%;
aspect-ratio: 16 / 9;
}
.skyblue {
background: skyblue;
}
.section-video-inner {
display: grid;
place-items: center;
position: absolute;
z-index: 2;
width: 100%;
height: 100%;
}
.video {
width: 100%;
height: 100%;
}
動画の上にSVGの白のドットを重ねる
サンプル2の動画(約1.3MB)を見ると、低画質のため荒れていることがわかります。
動画は高画質にすると、動画のファイルサイズが大きくなり、読み込みに時間がかかります。
そのため、Webサイトの背景に使用される動画は、ファイルサイズの小さい低画質の動画ファイルが使用されることが多いです。
しかし、低画質動画だと見た目が悪いので、下図のように動画の上に四角形のドットを配置して、低画質動画に見えないようにされることが多いです。
動画の上に配置する四角形のドットはPNG画像でも作成できますが、以下のようにbackgroundにインラインでSVGを作成したほうが、色、透明度、形などをエディタで簡単に変更できるのでオススメです。
.section-video-inner {
display: grid;
place-items: center;
position: absolute;
z-index: 2;
width: 100%;
height: 100%;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Crect width='2' height='2' fill='white' opacity='0.5'/%3E%3Crect x='2' width='2' height='2' fill='none'/%3E%3C/svg%3E");
background-size: 4px 4px;
}
ドットの色を黒にしたい場合は「fill='white'」を「fill='black'」または「fill='%23000'」に修正します。
CSSのbackgroundにインラインで記述する場合、「fill='#000'」だと反映されないので注意が必要です。
.section-video-inner {
/* 中略 */
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Crect width='2' height='2' fill='black' opacity='0.5'/%3E%3Crect x='2' width='2' height='2' fill='none'/%3E%3C/svg%3E");
background-size: 4px 4px;
}
動画の背景をfixedで固定する方法
Webサイトによっては動画をfixedで固定して、スクロースしても背景として、表示させ続けたいことがあります。
そのような場合は、動画の背景を「position: fixed」で固定します。
<section class="section-video fixed">
<div class="section-video-inner"></div>
<video class="video" src="sample.mp4" autoplay loop muted></video>
</section>
<section class="section">
<h1>content 1</h1>
</section>
<section class="section skyblue">
<h1>content 2</h1>
</section>
<section class="section">
<h1>content 3</h1>
</section>
<section class="section lightgreen">
<h1>content 4</h1>
</section>
body {
margin: 0;
padding: 0;
}
.section {
display: grid;
place-items: center;
position: relative;
z-index: 2;
width: 100%;
aspect-ratio: 16 / 9;
}
.skyblue {
background: skyblue;
}
.lightgreen {
background: lightgreen;
}
.section-video-inner {
display: grid;
place-items: center;
position: absolute;
z-index: 2;
width: 100%;
height: 100%;
background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4'%3E%3Crect width='2' height='2' fill='black' opacity='0.5'/%3E%3Crect x='2' width='2' height='2' fill='none'/%3E%3C/svg%3E");
background-size: 4px 4px;
}
.video {
width: 100%;
height: 100%;
object-fit: cover;
}
.fixed {
position: fixed;
inset: 0;
z-index: 1;
width: 100%;
height: 100%;
}
CSSのfilterで明度を変更する
黒を基調としたWebサイトだと黒のドットだけでは背景の動画が少し明るく見えることがあります。
そんなときは動画部分をfilterプロパティのbrightnessを適用して明度を変更できます。
.video {
width: 100%;
height: 100%;
object-fit: cover;
filter: brightness(0.5);
}