Skip to content

torifo/animation-scroll-type

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

C·Sc · スクロール拡縮タイポ

長スクロール(600vh)の中で 1 つの sticky stage が貼り付き、スクロール位置に応じて font-size / letter-spacing / font-weight / font-variation-settingsopsz / SOFT / WONK)をリアルタイム補間。架空タイプファウンダリー FOUNDRY ÅNGSTRÖM の新作書体『QUARTZ DISPLAY』プロダクトページに組み込んだ実用デモ。

Live demo: ./index.html

概要

項目 内容
ジャンル C · タイポグラフィ
用途 Sc · スクロール
主な参考 Apple Mac Pro, Resend, FoundryStandard
依存 なし(Pure HTML + CSS + Vanilla JS、Google Fonts の Fraunces 可変軸を使用)
推奨配置 タイプファウンダリー製品ページ/長尺ジャーナルの章送り/製品ストーリーテリング

仕組み

セクション全体が 600vh の高さを持ち、内部の .st-stageposition: sticky; top: 0; height: 100vh で貼り付く。スクロールが進むと JS が以下を計算する:

p = (-rect.top) / (rect.height - vh)    // 0..1

その p を 4 つのパネル (cover / anatomy / weights / specimen) の data-from / data-to 範囲とマッピングし、各パネルが範囲内で is-on クラス + opacity を持つ(隣接パネル間で smoothstep フェード)。

パネル内部の要素には data-prop-fsize="120,360" のように 「サブ進捗 0→1 での値範囲」 を書く。JS が毎フレーム補間して CSS 変数として書き込み、CSS が font-size: var(--prop-fsize) などで受ける。

サポートされる prop

属性 対応する CSS
data-prop-fsize font-size (px) "120,360"
data-prop-tracking letter-spacing (1/100em) "40,-30"
data-prop-wght font-weight / 'wght' "200,920"
data-prop-opsz 'opsz' (光学サイズ) "14,144"
data-prop-soft 'SOFT' (Fraunces) "0,72"
data-prop-wonk 'WONK' (Fraunces) "0,1"
data-prop-opacity opacity "0,1"
data-prop-show from/to の間だけ表示、エッジで fade ".18,.32"

要素には data-sub-from / data-sub-to を付ければ、パネル進捗の特定の窓だけ反応させられる。

組み込み手順

1. 2 ファイル + フォント

style.css/* ─── COMPONENT ─── */ ブロックと、script.js の IIFE 全体を移植先へ。<head> に可変フォントの link を追加(Fraunces や Bricolage Grotesque など)。

2. マークアップ

<section class="scroll-type" data-scroll-type>
  <div class="st-stage" data-stage>
    <div class="st-panel" data-panel="cover" data-from="0" data-to=".26">
      <h2 class="st-cover-title"
          data-prop-fsize="120,360"
          data-prop-tracking="40,-50"
          data-prop-wght="280,920"
          data-prop-opsz="14,144"
          data-sub-from="0" data-sub-to=".95">QUARTZ</h2>
    </div>
    <!-- 他のパネル ... -->
  </div>
</section>

CSS 側で受け取る:

.st-cover-title{
  font-family:var(--display);
  font-size: var(--prop-fsize, 180px);
  letter-spacing: calc(var(--prop-tracking, 0) * .01em);
  font-variation-settings:
    'opsz' var(--prop-opsz, 144),
    'wght' var(--prop-wght, 500);
}

パネル構成(デモの例)

範囲 内容
01 Cover 0–26% QUARTZ 巨大タイトルが scale + tracking 連続変化、kicker / サブ / メタが順に fade-in
02 Anatomy 24–52% Q を画面いっぱいに拡大、5 つのヘアライン注釈(BOWL / COUNTER / TAIL / TERMINAL / BASELINE)が順次出現
03 Weight axis 50–76% resonance の文字列が wght 200 → 920 に連続遷移、現在ウェイト名 + ladder ハイライト
04 Specimen + Spec sheet 74–100% 詩的プルクオートが scale up、右側に spec card が fade-in

アクセシビリティ

  • prefers-reduced-motion: reduce 時はパネルを is-on 固定、props はサブ進捗 0.5 で固定。連続補間は走らない。
  • 装飾要素は aria-hidden、本文部は h2 / blockquote / dl の通常のセマンティクス。

制約 / 既知の挙動

  • フォント可変軸を使うため、フォント未ロード時は font-variation-settings が無視される。CSS は通常 weight の fallback で動く。
  • スクロール進捗は getBoundingClientRect() を毎フレーム呼ぶため、コンポーネントを多数並べる場合は IntersectionObserver で見えていないものは skip すべき。
  • data-prop-fsize は px 固定単位。レスポンシブ性は CSS の clamp と組み合わせる(例:font-size: clamp(2rem, var(--prop-fsize, 180px), 14rem))。

変更履歴

  • v0.1 — 初版。Fraunces 可変軸(opsz/wght/SOFT/WONK)、4 panel、ヘアライン注釈、weight ladder、spec card。

ライセンス

ANIMATION DESIGN STUDY の一部として公開(コピペ自由)。

About

Animation study — scroll-driven typography. Sticky 100vh stage interpolates font-size, letter-spacing, weight, opsz, SOFT, WONK across 4 panels. Built into a fictional type foundry FOUNDRY ÅNGSTRÖM product page for QUARTZ DISPLAY. Pure HTML/CSS/JS, Fraunces variable font.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors