EFFECT №003

TEXT
SPLIT

テキストスプリット — CSS · AIプロンプト付き

文字を1つずつに分解し、時間差でアニメーションさせる。文章が呼吸するように立ち上がる。建築でいう連続するファサード。

TEXT CSS

CUSTOMIZE

↻ LIVE PREVIEW

入力するとデモ・コード・AIプロンプトが全て即座に書き換わります。文字数に応じて自動で stagger delay も調整されます。

HOVER ANYWHERE

CODE

01 / 02
<div class="split-text">
  <span>A</span><span>R</span><span>C</span>
  <span>H</span><span>I</span><span>T</span>
  <span>E</span><span>C</span><span>T</span>
</div>
.split-text {
  font-family: 'Oswald', sans-serif;
  font-size: 5rem;
  font-weight: 600;
  letter-spacing: 0.15em;
  color: #1A1A1A;
  display: flex;
  gap: 0.05em;
  cursor: pointer;
}

.split-text span {
  display: inline-block;
  transform: translateY(0);
  transition: transform 0.6s cubic-bezier(0.65, 0, 0.35, 1),
              color 0.4s ease;
}

.split-text:hover span {
  transform: translateY(-20px);
  color: #E91B89;
}

/* Stagger each character */
.split-text:hover span:nth-child(1) { transition-delay: 0.00s; }
.split-text:hover span:nth-child(2) { transition-delay: 0.04s; }
.split-text:hover span:nth-child(3) { transition-delay: 0.08s; }
.split-text:hover span:nth-child(4) { transition-delay: 0.12s; }
.split-text:hover span:nth-child(5) { transition-delay: 0.16s; }
/* ... continue for each character ... */

@media (prefers-reduced-motion: reduce) {
  .split-text span { transition: color 0.4s ease; }
  .split-text:hover span { transform: none; }
}

AI PROMPT

02 / 02
Implement a "Text Split" stagger animation.

Behavior:
- Each character of the target text wraps in its own <span>.
- On parent hover, every character translateY(-20px) and shifts color to brand accent (#E91B89).
- Stagger: each subsequent character has +0.04s transition-delay.
- Easing: cubic-bezier(0.65, 0, 0.35, 1), duration 0.6s.

Constraints:
- Pure CSS preferred. Use :nth-child for stagger.
- If the text is dynamic, use vanilla JS to wrap each char on load.
- Respect prefers-reduced-motion: keep color transition only.

Output: HTML structure + CSS. If JS char-wrapping is needed, include it as a 3rd block.
Build a "Text Split" hover animation:

Approach:
- Wrap each character of the heading in <span>.
- Display the parent as flex with small gap (0.05em).
- On parent:hover, each span translates Y -20px with staggered transition-delay.

Stagger formula: delay = index * 0.04s

Easing: cubic-bezier(0.65, 0, 0.35, 1), 0.6s

Color shift on hover: #1A1A1A → #E91B89

For dynamic text, generate this JS helper:
  function splitChars(el) {
    el.innerHTML = [...el.textContent].map(c =>
      c === ' ' ? '&nbsp;' : `<span>${c}</span>`
    ).join('');
  }

A11y: @media (prefers-reduced-motion: reduce) → no transform, only color.
Create a React component <SplitText> with props:
- text: string
- triggerOn?: 'hover' | 'view' (default 'hover')
- staggerMs?: number (default 40)

Implementation:
- Split text into characters: [...text].map((char, i) => ...)
- Render each as a <span> with style={{ transitionDelay: `${i * staggerMs}ms` }}
- Wrap in a container with relative positioning.

Tailwind:
- Container: inline-flex gap-[0.05em] cursor-pointer
- Each span: inline-block transition-all duration-[600ms] ease-[cubic-bezier(0.65,0,0.35,1)]
- On group-hover: translate-y-[-20px] text-pink-600 (or arbitrary #E91B89)

Use group + group-hover utilities for the parent-controlled hover.

Honor prefers-reduced-motion via Tailwind motion-safe: variants.

BOOKS

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

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

RELATED EFFECTS

↗ MORE
→ REVEAL MASK → TYPEWRITER → TILT 3D HOVER

学びを止めない

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

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

テキストスプリット(Text Split)とは

文字を1つずつに分解し、時間差でアニメーションさせる。文章が呼吸するように立ち上がる。建築でいう連続するファサード。この効果はCSSの@keyframesアニメーションとtransition/transformだけで実装でき、JavaScriptを必要としません。

使いどころ

ヒーローの見出し・キャッチコピー・セクションタイトルなど、視線を集めたいテキストに向く。やりすぎると可読性や操作性を損なうため、目的のある一点に絞って使うのがコツです。

CSS実装のポイント

動きはGPUで処理されやすいtransformとopacityを軸に組み立てると、レイアウトの再計算(リフロー)を避けて滑らかに動きます。width・height・top/leftなど位置やサイズを直接変えるアニメーションは負荷が高いため避けるのが定石です。当サイトのコードはprefers-reduced-motionに対応しており、動きを減らす設定にしている利用者には自動でアニメーションを抑えるよう配慮しています。

CSSとJavaScriptの違い

CSSアニメーションは@keyframesやtransitionで宣言的に書け、ブラウザが最適化するため軽量です。JavaScriptを使う方法は細かい制御やインタラクションに強い反面、コード量が増えやすくなります。この効果はJavaScriptなしのCSSだけで完結するため、読み込みが軽く保守も簡単という利点があります。