CSS Scroll Timelineは、ウェブ開発者にとって画期的な新機能です。これにより、スクロールに基づいたアニメーションやスタイルの変更が簡単に実現できるようになりました。このブログでは、CSS Scroll Timelineの基本的な概念から、実際の実装例まで幅広く解説します。
CSS Scroll Timelineの基本概念
CSS Scroll Timelineは、要素のスクロール位置に基づいてアニメーションを制御するための新しいCSS機能です。この機能を使用することで、開発者はスクロールの進行に応じてアニメーションやスタイルを変更できるため、よりインタラクティブで魅力的なウェブサイトを作成できます。
スクロールタイムラインの仕組み
Scroll Timelineは、特定の要素のスクロール進行状況をトリガーとして利用します。これにより、開発者は指定したスクロール位置に基づいてアニメーションを設定できます。たとえば、ユーザーがページを下にスクロールする際に、特定の要素の色を変えたり、位置を移動させたりすることが可能です。
Scroll Timelineは、@scroll-timeline
ルールを使用して定義されます。このルールでは、スクロールの進行状況を指定し、それに基づいてアニメーションを適用することができます。
@scroll-timeline timeline-name {
source: selector;
scroll-source: viewport;
start: 0%;
end: 100%;
}
このコードでは、timeline-name
は任意の名前、selector
は対象要素のセレクタを指定します。また、scroll-source
プロパティには、スクロールの参照元を設定します。通常はviewport
を指定し、ページ全体がスクロールされることを意味します。
スクロールタイムラインの利点
Scroll Timelineを利用することで、以下のような利点があります。
- インタラクティブ性の向上: ユーザーがスクロールする際にアニメーションがトリガーされることで、よりインタラクティブな体験を提供できます。
- CSSのみでの実装: JavaScriptを使わずにCSSだけでアニメーションを制御できるため、パフォーマンスが向上します。
- 視覚的な表現力: スクロールに応じたアニメーションは、コンテンツの魅力を引き立てる要素となります。
CSS Scroll Timelineの実装例
See the Pen
css_scrollTimeline01 by Rin (@rinblog0408)
on CodePen.
実際にCSS Scroll Timelineを使ってみましょう。以下のコードは、ページのスクロールに応じて背景色が変わるシンプルな例です。
HTML
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Scroll Timeline Example</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="scroll-container">
<div class="scroll-section section1">セクション 1</div>
<div class="scroll-section section2">セクション 2</div>
<div class="scroll-section section3">セクション 3</div>
</div>
<script src="script.js"></script>
</body>
</html>
CSS
body {
margin: 0;
font-family: Arial, sans-serif;
}
.scroll-container {
height: 300vh; /* ページ全体をスクロール可能にするために高さを設定 */
}
.scroll-section {
height: 100vh; /* 各セクションの高さを100%のビューポートに設定 */
display: flex;
align-items: center;
justify-content: center;
font-size: 2rem;
}
.section1 {
background-color: #ff7f50; /* セクション1の背景色 */
}
.section2 {
background-color: #3cb371; /* セクション2の背景色 */
}
.section3 {
background-color: #1e90ff; /* セクション3の背景色 */
}
@scroll-timeline color-change {
source: .scroll-container;
scroll-source: viewport;
start: 0%;
end: 100%;
}
.scroll-section {
animation: changeColor 1s forwards;
}
@keyframes changeColor {
from {
opacity: 1;
}
to {
opacity: 0.5; /* スクロールに応じて不透明度を変化させる */
}
}
この例では、3つのセクションがあり、それぞれ異なる背景色が設定されています。ユーザーがページをスクロールする際に、各セクションの色が変わるアニメーションが実行されます。
CSS Scroll Timelineの活用例
CSS Scroll Timelineは、さまざまなシナリオで活用可能です。以下に、実際にどのように使用されているかの例をいくつか挙げます。
スクロールに応じたテキストのアニメーション
Webサイトでよく見られる効果の一つは、ユーザーがスクロールする際にテキストがフェードインしたり、スライドしたりすることです。これにより、情報をより魅力的に提示できます。
@scroll-timeline text-animation {
source: .text-container;
scroll-source: viewport;
start: 0%;
end: 100%;
}
.text-container {
animation: fadeIn 1s forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
この例では、.text-container
要素がスクロールに応じて徐々に現れ、上からスライドインするアニメーションが適用されています。
画像のスクロールに応じたズーム効果
スクロールに合わせて画像がズームインしたりズームアウトしたりする効果は、視覚的に非常にインパクトがあります。これにより、特定の要素を強調することができます。
@scroll-timeline zoom-animation {
source: .image-container;
scroll-source: viewport;
start: 0%;
end: 100%;
}
.image-container {
animation: zoomIn 1s forwards;
}
@keyframes zoomIn {
from {
transform: scale(0.9);
}
to {
transform: scale(1);
}
}
この例では、.image-container
がスクロールに応じてズームインするアニメーションが適用されており、ユーザーに印象を与えることができます。