←back

cssだけで実装するscroll animation

2022/10/04

/public/images/astronotion/66c374fc-28bf-4242-9193-171c98cb2044_Untitled.png

stickyなグロナビのデザインを提案した際の会話

パートナー: グロナビの縦、広すぎへん?もっと狭くしようや。

AWデザイナー: ややや。アクセシビリティ的に48pxは確保したいんですわ。

AWデザイナー: なんでしたらスクロールした際は狭くなるようにアニメーションいれまっけど?

パートナー: どういうこっちゃ?みせてくれへん?

AWデザイナー: ややや。figmaのプロトタイプでアニメーションは見せられへんのです。

AWデザイナー: ちょっと待ってつかーさい。

エンジニアでび: (このくらいやったら5minやな)

エンジニアでび: (そいやまだcanaryでしかつかえひんけど、@scroll-animationつかえばjsもいらんし。)

エンジニアでび: (codepenとかでサクッと書いとこか)

書いた

codepen.io/kdaviso/pen/dymYxdB
scroll-timeline navigation

body { position: relative; display: flex; flex-direction: column; justify-content: space-between; height: 1000px; } .navigations { align-items: center; background: #c03; color: #fff; display: flex; gap: 1rem; margin: 1rem; list-style: none; position: sticky; top: 0; /* scroll-timeline */ animation-name: sticky-animation; animation-timeline: sticky-animation-timeline; animation-duration: 0.5s; animation-fill-mode: both; } .navigation { cursor: pointer; flex: 1; text-align: center; transition: 0.2s ease; } .navigation:hover { opacity: 0.5; } @keyframes sticky-animation { 0% { border-radius: 16px; height: 3rem; } 20%, 100%{ border-radius: 0 0 16px 16px; height: 2rem; } } @scroll-timeline sticky-animation-timeline { start: 0%; end: 100%; time-range: 0.5s; }

  • scroll量に対応して、heightが狭くなる
  • scroll量に対応して、上端の角丸がなくなる
  • ⚠️canaryのenable-experimental-web-platform-features を enableにしないと動きまへんで
    • ここから設定どうぞ
    • jsで書いても5minでいけるので、別にcssで書く必要ない🤪
      • eventListnerのthrottle処理とか書かなくて良い分、シンプルになる利点もある
      • パフォーマンスもjs書くより良い気がするけど、わからん🤪
    • いつ公式に入るかの目処も立ってない気がするので、完全にお遊び🤪
←back