CSS

CSS Scroll Timeline: 新しいスクロール体験の実現

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を利用することで、以下のような利点があります。

  1. インタラクティブ性の向上: ユーザーがスクロールする際にアニメーションがトリガーされることで、よりインタラクティブな体験を提供できます。
  2. CSSのみでの実装: JavaScriptを使わずにCSSだけでアニメーションを制御できるため、パフォーマンスが向上します。
  3. 視覚的な表現力: スクロールに応じたアニメーションは、コンテンツの魅力を引き立てる要素となります。

 

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がスクロールに応じてズームインするアニメーションが適用されており、ユーザーに印象を与えることができます。

ABOUT ME
りん
沖縄から福岡に移住。QA/Webデザイナー/SE/フリーランス/SE人事など。趣味や好きなことをブログにまとめてます。