概要

timeline-scopeは、CSSアニメーションで使用されるタイムラインのスコープ(範囲)を制御するプロパティです。特定のイベント(例えばスクロールやページ内のトリガー)に基づいてアニメーションを動作させる場合、このプロパティを使ってアニメーションの影響範囲を限定することができます。これにより、特定の要素だけにアニメーションを適用したり、ページ全体のスクロールに応じたアニメーションを作成するなど、より柔軟でダイナミックなWebデザインを実現できます。

基本的な構文

selector {
    timeline-scope: value;
}
  • valueには、タイムラインのスコープを制御する値を指定します。

主な値

  • auto
    デフォルトの値で、アニメーションのスコープを自動的に決定します。
  • document
    タイムラインのスコープをページ全体(ドキュメント)に適用します。これにより、ドキュメント全体のスクロールに応じたアニメーションが可能になります。
  • element
    アニメーションのスコープを特定の要素に限定します。スクロールやその他のイベントがその要素内で発生した場合にのみ、アニメーションが適用されます。

例 - timeline-scopeの基本的な使用

以下は、timeline-scopeを使って特定の要素にアニメーションタイムラインを設定する例です。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .scroll-animate {
            width: 100px;
            height: 100px;
            background-color: lightblue;
            animation: move 5s infinite;
            timeline-scope: element; /* この要素にタイムラインのスコープを限定 */
        }
        @keyframes move {
            0% { transform: translateX(0); }
            100% { transform: translateX(300px); }
        }
    </style>
    <title>timeline-scopeの例</title>
</head>
<body>
    <div class="scroll-animate">
        スクロールで動く要素
    </div>
</body>
</html>

説明

この例では、.scroll-animateクラスの要素にtimeline-scope: elementを設定しています。この設定により、アニメーションが特定の要素内で発生するスクロールなどのイベントに応じて実行されます。ページ全体ではなく、特定のエリア内でアニメーションが制御されるため、効果的に範囲を限定して動作させることが可能です。

timeline-scopeの用途と効果

timeline-scopeを使用することで、アニメーションのスコープをページ全体に適用するのか、特定の要素に限定するのかを柔軟に制御できます。このプロパティは、スクロールイベントや特定の領域でのみアニメーションを発動させたい場合に非常に便利です。

主な効果

  • ページ全体に応じたアニメーション: timeline-scope: documentを使用すると、ページのスクロールに連動したアニメーションを実装できます。パララックスやページ内のセクションごとのアニメーションに役立ちます。
  • 特定の要素に限定したアニメーション: timeline-scope: elementを使用することで、要素ごとに独立したアニメーションを作成でき、ページ全体のパフォーマンスにも影響を与えにくくなります。

timeline-scopeと他のタイムラインプロパティの組み合わせ

timeline-scopeは他のタイムライン関連のプロパティと組み合わせることで、より複雑で効果的なアニメーションが可能です。たとえば、scroll-timelineプロパティと連動させることで、スクロールに基づくアニメーションを柔軟に設定できます。

例 - scroll-timelineとの連携

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        @scroll-timeline my-scroll-timeline {
            source: auto;
            axis: block;
        }
        .animate-box {
            width: 100px;
            height: 100px;
            background-color: coral;
            scroll-timeline-name: my-scroll-timeline;
            timeline-scope: document; /* ページ全体のスクロールに応じたアニメーション */
            animation: slide 2s infinite;
        }
        @keyframes slide {
            0% { transform: translateX(0); }
            100% { transform: translateX(300px); }
        }
    </style>
    <title>timeline-scopeとscroll-timelineの連携例</title>
</head>
<body>
    <div class="animate-box">
        スクロール連動のアニメーション
    </div>
</body>
</html>

説明

この例では、scroll-timelinetimeline-scope: documentを組み合わせて、ページ全体のスクロールに応じてアニメーションが動くように設定しています。これにより、ページ全体のスクロールイベントがアニメーションのトリガーとなり、よりダイナミックな効果を実現しています。

timeline-scopeを使う際の注意点

  1. ブラウザのサポート
    timeline-scopeは比較的新しいプロパティであり、すべてのブラウザでサポートされているわけではありません。特に、古いブラウザでは未対応の可能性があるため、使用する際にはブラウザの対応状況を確認することが重要です。
  2. アニメーションのパフォーマンス
    タイムラインのスコープを大きく設定すると(たとえばdocument)、アニメーションがページ全体に影響を与えるため、パフォーマンスに負荷がかかる可能性があります。特に、スクロールイベントをトリガーにしたアニメーションでは、慎重に範囲を設定することが大切です。

timeline-scopeのデザイン効果

timeline-scopeを使うことで、アニメーションの範囲を的確に制御できるため、デザインの自由度が大幅に向上します。特定の要素だけにアニメーションを適用したり、ページ全体に広がるダイナミックな動きを作成することで、ユーザー体験を向上させます。

例 - ダイナミックなWebデザイン

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        body {
            height: 200vh; /* スクロール可能な高さ */
        }
        .dynamic-box {
            width: 100px;
            height: 100px;
            background-color: limegreen;
            timeline-scope: document;
            animation: dynamic-move 3s infinite;
        }
        @keyframes dynamic-move {
            0% { transform: translateY(0); }
            100% { transform: translateY(500px); }
        }
    </style>
    <title>ダイナミックなWebデザイン</title>
</head>
<body>
    <div class="dynamic-box">
        ダイナミックアニメーション
    </div>
</body>
</html>

説明

この例では、timeline-scope: documentを使ってページ全体のスクロールに応じたアニメーションが作成されています。スクロールに連動して要素が動くことで、視覚的にダイナミックなWeb体験を提供します。

まとめ

timeline-scopeは、CSSでアニメーションのタイムラインを制御し、特定の要素やページ全体に応じたアニメーションを作成できる強力なプロパティです。スクロールイベントに基づくアニメーションや、特定の要素内で限定されたアニメーションを柔軟に設定することで、ユーザーにとってインタラクティブでダイナミックなWebデザインを実現できます。ブラウザのサポート状況に注意しながら、適切に活用してデザインを強化しましょう。