ウェブデザインをするとき、視覚的なエフェクトはとても効果的です。特に、スクロールに応じて背景を変化させる「ブラー」エフェクトは、ユーザーの注意を引きやすく、魅力的な効果を生み出します。この記事では、スクロールと連動して背景にブラーをかける方法を、HTML、CSS、JavaScriptを使って解説します。初心者から中級者向けに、コードをわかりやすく説明しますので、ぜひ実際に試してみてください!
サンプル
基本のHTML構造
まずは、HTMLの基本構造を準備します。背景画像がぼやけるエフェクトを作るために、2つのセクションを用意しました。
<div class="content blur-background">
<div class="background"></div>
<div class="text">
<h1>スクロールで背景にブラー</h1>
<p>スクロールすると背景画像がぼやけます!</p>
</div>
</div>
<div class="content white-background">
<div class="background"></div>
<div class="text">
<h1>背景が白いコンテンツ</h1>
<p>これは背景が白くなるコンテンツです。</p>
</div>
</div>
ここでは、.content
というクラスで全体をラップし、その中で背景を設定するための.background
と、テキストを表示するための.text
を作成しています。背景部分のスタイリングを行い、テキストはスクロールしても固定されるようにします。
CSSでのレイアウトとスタイリング
次に、CSSを使ってレイアウトを整えます。ここでは、背景画像を設定し、スクロールに合わせてブラーエフェクトを追加できるように準備します。
body {
margin: 0;
font-family: Arial, sans-serif;
overflow-x: hidden; /* 横スクロール防止 */
}
.content {
position: relative;
width: 100%;
}
.blur-background {
height: 300vh; /* このセクションの高さを300vhに設定 */
}
.white-background {
height: 100vh; /* このセクションの高さを200vhに設定 */
}
.background {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: url('https://as1.ftcdn.net/v2/jpg/03/90/63/84/1000_F_390638401_HbagabflE6cevPucZM5drrajYvPBnIYv.jpg') no-repeat center center;
background-size: cover;
transition: filter 0.3s ease, opacity 0.3s ease; /* 不透明度とフィルタにトランジションを追加 */
z-index: -1;
will-change: filter, opacity; /* パフォーマンス向上 */
}
.text {
position: sticky; /* スクロールに合わせてテキストが固定される */
top: 50px; /* スクロール時に少し余白を取る */
z-index: 1;
padding: 50px;
text-align: center;
}
h1 {
font-size: 3rem;
color: white;
}
p {
font-size: 1.5rem;
color: white;
}
ここでは、.background
で背景画像を固定し、.text
でテキストがスクロールしても動かないようにposition: sticky
を使っています。background-size: cover
で背景画像を画面いっぱいに広げ、スクロールに合わせて背景がブラーになる準備をします。
スクロール連動のJavaScript
JavaScriptを使って、スクロールイベントに応じて背景のブラーエフェクトを変更する機能を追加します。スクロール量に合わせて背景がぼやけ、さらに透明度が変化するようにします。
window.addEventListener('scroll', function() {
const backgrounds = document.querySelectorAll('.background');
const blurContent = document.querySelector('.blur-background');
const whiteContent = document.querySelector('.white-background');
const scrollPosition = window.scrollY;
const textElements = document.querySelectorAll('.blur-background .text h1, .blur-background .text p'); // h1とpを取得
// blur-backgroundが表示されている部分
const blurContentPosition = blurContent.offsetTop;
const whiteContentPosition = whiteContent.offsetTop;
// ブラーをかけ始めるためのスクロール距離
const startBlurDistance = 500; // 500pxスクロールしたらブラー開始
// blur-backgroundが表示される範囲
if (scrollPosition >= blurContentPosition && scrollPosition < whiteContentPosition) {
// スクロールが一定距離を超えてからブラーを適用
if (scrollPosition > startBlurDistance) {
const blurAmount = Math.min((scrollPosition - startBlurDistance) / 2, 500); // スクロール開始からの距離でブラー量を決定
const opacityAmount = Math.max(1 - (scrollPosition / 1000), 0); // 透明度を減少させる
backgrounds.forEach(background => {
background.style.filter = `blur(${blurAmount}px)`; // ブラーを適用
background.style.opacity = opacityAmount; // 透明度を減少
});
// h1とpの透明度をスクロールに応じて減少
textElements.forEach(text => {
const textOpacity = Math.max(1 - (scrollPosition / 1000), 0); // 透明度を減少させる
text.style.opacity = textOpacity;
});
} else {
// スクロール位置がstartBlurDistanceより小さくなったらリセット
backgrounds.forEach(background => {
background.style.filter = 'blur(0px)';
background.style.opacity = 1; // 元の透明度に戻す
});
textElements.forEach(text => {
text.style.opacity = 1; // 元の透明度に戻す
});
}
}
// white-backgroundが表示される部分
if (scrollPosition >= whiteContentPosition) {
// 背景を完全にフェードアウト
backgrounds.forEach(background => {
background.style.filter = 'blur(0px)';
background.style.opacity = 0; // 背景画像を完全に消す
});
// h1とpの透明度を0に
textElements.forEach(text => {
text.style.opacity = 0;
});
}
});
スクロールすると、背景画像に徐々にブラーがかかり、テキスト部分の透明度が変化します。スクロールが進むにつれて、背景画像が完全にフェードアウトし、次のコンテンツに進むことができます。
カスタマイズの方法
スクロールで背景にブラーをかけるエフェクトは非常にシンプルで、カスタマイズがしやすいです。以下の部分を変更することで、さらに自分好みに調整できます。
ブラーの強さを変更する
const blurAmount = Math.min((scrollPosition - startBlurDistance) / 2, 500); // スクロール開始からの距離でブラー量を決定
(scrollPosition - startBlurDistance) / 2
の部分を変更することで、ブラーの強さを調整できます。
- 値を小さくするとブラーが弱く、ゆるやかに変化します。
- 値を大きくするとブラーが強く、早い段階でぼかしがかかります。
背景画像を変更する
background: url('https://your-image-url.jpg') no-repeat center center;
背景に使用する画像を変更することで、異なるビジュアルを作り出せます。background-size: cover
で画像を画面全体にフィットさせることができます。
テキストの透明度や色を調整する
テキストの透明度や色を変更することで、さらに個性的なデザインを作れます。例えば、テキストの色を別のカラーにしたり、透明度を変更して印象を変えることができます。
まとめ
スクロールに合わせて背景にブラーをかけるエフェクトは、視覚的にインパクトのあるデザインができます。これを使えば、ページの内容を引き立たせ、より動きのあるウェブサイトを作ることができます。初心者でも簡単に取り入れられるエフェクトなので、ぜひ試してみてください!