Scroll Progress Timelineは、スクロールできるコンテナー内のスクロール位置によって、アニメーションを指定できるタイムラインである。このサンプルでは特定したコンテナ(ブラウザが表示した全高の色のついた範囲)のスクロールの位置によりプログレスバーを 0% から 100% まで表示する。
Scroll Progress Timeline の基本的な使い方は、アニメーションさせたい要素(ここでは赤い線)の animation-timeline に scroll() 関数を使い、animation に @keyframes を指定する。
animation-range: entry; は、スクロールポートに要素が見える範囲がアニメーション範囲になる。要素がスクロールポートに1px以上入ってから、全要素が見えるようになるまでアニメーションする。
<div class="view">
<div class="item"></div> <!-- 赤い色のプログレスバー -->
<p>
Scroll Progress Timelineは、…まで表示する。
</p>
<p>
Scroll Progress Timeline の…を指定する。
</p>
<p>
<img class="revealing-image" src="images/joe_sample.jpg" alt="" style="margin-top: 1rem;">
</p>
<p>
…
</p>
</div>
.view {
font-size: 1rem;
line-height: 1.3;
max-width: 600px;
margin: 0 auto;
padding: 1rem;
font-family: 'Noto Sans JP', sans-serif;
font-weight: 400;
color: #333;
background-color: rgba(176, 196, 222, .2);
}
/* プログレスバー */
.item {
position: fixed;
height: .5rem;
top: 0;
left: 0;
background-color: red;
animation: auto linear change both; /* animation-duration: auto; */
animation-timeline: scroll();
animation-range: entry;
}
@keyframes reveal {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes change {
from {
width: 0;
}
to {
width: 100%;
}
}
.revealing-image {
width: 100%;
height: auto;
animation: auto linear reveal both; /* both (※注釈 A) */
animation-timeline: view();
animation-range: entry 25% cover 50%; /* animation-range: (※注釈 B) */
}
CSS の animation: linear は、アニメーションを一定の速度で実行する値である。その他、ease: 軽く加速をして、終わりで軽く減速する・ease-in: 最初はゆっくりで、だんだん速くなる・ease-in-out: 最初と最後に減速と加速が入る、などがある。
(※注釈 A) CSS の animation プロパティの「both」は、再生前は@keyframes(0%)が、再生後は@keyframes(100%)のスタイルが適用される。
(※注釈 B) CSS の animation-range: は、直訳で「アニメーション範囲」である。