No.122
TEXT CSS

Variable Font Morph

font-variation-settings をアニメーションさせ、太さと幅が連続的に変化する可変フォントのモーフィング。1ファイルで全ウェイトを賄える可変フォントならではの表現。

DEMO

VARIABLE

wght 100 → 900 / wdth 60 → 140

CODE

HTML
<link href="https://fonts.googleapis.com/css2?family=Roboto+Flex:opsz,wdth,wght@8..144,25..151,100..1000&display=swap" rel="stylesheet">
<div class="demo-stage vfm-stage">
  <p class="vfm-text">VARIABLE</p>
  <p class="vfm-sub">wght 100 → 900 / wdth 60 → 140</p>
</div>
CSS
.vfm-stage { display:flex; flex-direction:column; align-items:center; justify-content:center; gap:1.2rem; padding:3rem 1.5rem; background:#0F0F12; min-height:280px; overflow:hidden; }
.vfm-text {
  font-family:'Roboto Flex','Inter',sans-serif;
  font-size:clamp(2.2rem,11vw,4.5rem); line-height:1; color:#fff;
  font-variation-settings:'wght' 100,'wdth' 60;
  animation: vfm-morph 4.5s cubic-bezier(.65,0,.35,1) infinite alternate;
  will-change: font-variation-settings;
}
@keyframes vfm-morph {
  from { font-variation-settings:'wght' 100,'wdth' 60; color:#7A7A85; }
  to   { font-variation-settings:'wght' 900,'wdth' 140; color:#E91B89; }
}
.vfm-sub { font-family:'JetBrains Mono',monospace; font-size:.72rem; letter-spacing:.12em; color:#5A5A66; }
@media (prefers-reduced-motion: reduce) {
  .vfm-text { animation:none; font-variation-settings:'wght' 700,'wdth' 100; color:#E91B89; }
}

AI PROMPT

Claude Code Cursor v0
PROMPT
可変フォント(variable font)の軸をアニメーションさせて、太さと幅が連続的に変化する見出しを作って。まず可変フォントを軸の範囲付きで読み込む(例: Google Fonts の Roboto Flex を wght@100..1000, wdth@25..151 の範囲指定で読み込む。範囲を指定しないと静的インスタンスしか降ってこず段階的にしか変化しない)。次に @keyframes で font-variation-settings: 'wght' 100, 'wdth' 60 から 'wght' 900, 'wdth' 140 へ変化させる。animation-direction: alternate を付けると往復する。font-weight プロパティでも可変軸は補間されるが、wdth など wght 以外の軸も同時に動かすなら font-variation-settings で一括指定する方が確実。will-change: font-variation-settings を添えると再ラスタライズが安定する。注意点として、可変軸のアニメーションはテキストの再描画を伴うため、大きな見出し1〜2箇所に絞ること。本文全体に掛けると重くなる。

Acceptance criteria: works with prefers-reduced-motion (animation disabled), zero console errors, zero layout shift

AIエージェントでの実装ガイド → Claude Code でWebアニメーションを実装する

BOOKS · PR · AMAZON

📖 なかしまぁ先生のCSSアニメーション入門 📖 UIデザインの心理学 ―わかりやすさ・使いやすさの法則 📖 Fundamentals of Web Animation with GSAP

※当サイトはAmazonアソシエイトプログラムの参加者です。リンクから商品をご購入いただくと、当方に紹介料が発生します。

学びを止めない · AMAZONサブスク

📚 Kindle Unlimited — 技術書・デザイン書が読み放題。30日無料体験 → 🎧 Audible — 移動中に耳で学ぶオーディオブック。30日無料体験 → 📦 Amazon Prime — Prime Reading・配送特典つき。30日無料体験 → 🎵 Music Unlimited — 作業用BGMに。1億曲が聴き放題・30日無料体験 →

※当サイトはAmazonアソシエイトプログラムの参加者です。リンクから商品をご購入いただくと、当方に紹介料が発生します。

RELATED EFFECTS

↗ MORE
→ GRADIENT TEXT → WORD PULL UP → WAVY TEXT

Variable Font Morph(可変フォントのモーフィング)とは

可変フォントは1つのフォントファイルの中に太さ・幅・傾きなどの「軸」を持ち、その軸の値を連続的に変えられる形式です。font-variation-settings をCSSアニメーションで動かすと、Light から Black まで滑らかに太っていく、といった従来のウェブフォントでは不可能だった表現ができます。

当サイトの Gradient Text は色、Wavy Text は位置を動かす表現で、文字の形そのものは変わりません。本ページは文字の骨格自体が変形する別テーマで、ブランドロゴのアニメーションやヒーロー見出しのアイキャッチに向きます。

実装で最も多い失敗は、Google Fonts の読み込みURLで軸の範囲を指定し忘れることです。範囲記法(wght@100..1000)で読み込まないと可変フォント本体が配信されず、指定しても段階的にしか変化しません。

よくある質問

可変フォントの軸アニメーションは重くないですか?

文字のラスタライズが毎フレーム走るため、transform や opacity のアニメーションよりは負荷が高くなります。ヒーローの見出し1〜2箇所に限定し、本文や大量のテキストには使わないのが原則です。will-change: font-variation-settings を指定するとブラウザが最適化しやすくなります。

Google Fonts で可変軸が動かないのはなぜですか?

読み込みURLで軸の範囲を指定していない可能性が高いです。family=Roboto+Flex:wght@400 のように単一の値を書くと静的インスタンスだけが配信され、中間値へ補間されません。wght@100..1000 のように範囲記法(2つのドット)で指定すると可変フォント本体が配信され、連続的なアニメーションが可能になります。

コードは無料で使えますか?

はい。Motion LabのコードスニペットとAIプロンプトは、クレジット表記なしで自由に使えます。コピーしてそのままプロジェクトに利用できます。