Styledex
← Index

Kinetic Typography

动力学排印

stylekitMITExperimental · experimentalLight · lightMedium · mediumNeutral · neutralMuted · mutedSerif · serifGeneral · generalLanding · landing

文字即界面的动态排印风格。墨黑舞台上,可变字体的字重与字宽成为动画本体:逐字登场、字重呼吸、滚动速度拉伸字宽。一切动效只属于文字,唯一的信号橙负责指路。

NNorthwind
Product · Pricing
Specimen
Make the work feel finished

One interface, dressed in this style. Compare type, color, radius, and density.

128
Active
4.8
Score
12ms
Edge

Attribution

"Kinetic Typography" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86.

https://github.com/AnxForever/stylekit · api/styles/kinetic-typography · bfa7da909e86 · © AnxForever

Do

  • 背景用近黑墨色 #0B0B0C,文字用暖骨白 #F4F1EB,制造高对比舞台感
  • 加载可变字体(如 Anybody,wght 100-900 + wdth 50-150 双轴)作为展示字体
  • 标题入场用遮罩上升:外层 overflow-hidden,内层 translateY(110%) 动画到 0,逐字/逐词 stagger 30-50ms
  • 离散入场和交互过渡使用 expo-out:cubic-bezier(0.22,1,0.36,1),入场 0.7-0.9s、hover 反馈 0.3-0.5s;连续装饰循环单独设定节奏
  • 用 font-variation-settings 动画字重(呼吸 300-800)与字宽(滚动速度联动 100-150)
  • 字号反差拉满:标签 11-12px 大写宽字距 + 标题 clamp(3rem,10vw,9rem) tracking-tight
  • 跑马灯用 CSS 无缝循环(内容复制两份 + translateX -50%),hover 暂停;自动播放且超过 5 秒并与其他内容并列的滚动信息,还要提供可持续使用的暂停/停止/隐藏机制
  • 信号橙 #FF4D00 只出现在主 CTA、关键词与悬停态

Don't

  • 禁止动画 top/left/width/height 等布局属性(重排卡顿)——只许 transform/opacity/font-variation-settings
  • 禁止一屏同时跑多个主导动效(编舞规则:一次一个主角)
  • 禁止用图片或插画抢文字的戏(本风格里图像最多是背景纹理)
  • 禁止超过一个强调色,禁止把信号橙铺成大面积底色
  • 禁止平淡的 opacity-only 淡入代替遮罩上升
  • 禁止离散入场或交互过渡超过 1.2s,或对这些一次性过渡使用 linear;连续装饰循环不受此时长限制,呼吸可用 2.4s ease-in-out,跑马灯可用 24s linear 保持匀速
  • 禁止忽略 prefers-reduced-motion

Prompt

Create a kinetic typography landing page with:
1. Stage: #0B0B0C background, #F4F1EB text, single #FF4D00 accent
2. Load variable font Anybody (wght 100-900, wdth 50-150) from fonts.loli.net
3. Hero: clamp(3rem,10vw,9rem) headline, each line rising from an overflow mask with 80ms stagger, one accent word running a wght 300-800 breathing loop
4. A full-width marquee strip of uppercase feature words, pause on hover; auto-starting scrolling information that runs over 5 seconds alongside other content also needs a persistent pause/stop/hide mechanism
5. Numbered feature cards whose headlines jump from wght 450 to 800 on hover
6. CTA button with signal-orange fill wipe rising on hover
7. Use cubic-bezier(0.22,1,0.36,1) for discrete entrances and interaction transitions; continuous breathing uses 2.4s ease-in-out and marquee uses 24s linear; only transform/opacity/font-variation-settings animate; prefers-reduced-motion lands everything on static end states

---
"Kinetic Typography" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86.
powered by Styledex — https://styledex.dev

Tokens

DTCG

{
  "$schema": "https://www.designtokens.org/schemas/2025.10/format.json",
  "$description": "Kinetic Typography. \"Kinetic Typography\" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86.",
  "$extensions": {
    "dev.styledex": {
      "id": "stylekit-kinetic-typography",
      "license": "MIT",
      "attribution": "\"Kinetic Typography\" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86.",
      "banner": "powered by Styledex — https://styledex.dev"
    }
  },
  "color": {
    "background": {
      "$type": "color",
      "$value": "#0b0b0c"
    },
    "foreground": {
      "$type": "color",
      "$value": "#f4f1eb"
    },
    "card": {
      "$type": "color",
      "$value": "#0b0b0c"
    },
    "card-foreground": {
      "$type": "color",
      "$value": "#f4f1eb"
    },
    "primary": {
      "$type": "color",
      "$value": "#0b0b0c"
    },
    "primary-foreground": {
      "$type": "color",
      "$value": "#fafaf9"
    },
    "secondary": {
      "$type": "color",
      "$value": "#f4f1eb"
    },
    "secondary-foreground": {
      "$type": "color",
      "$value": "#f4f1eb"
    },
    "accent": {
      "$type": "color",
      "$value": "#ff4d00"
    },
    "accent-foreground": {
      "$type": "color",
      "$value": "#fafaf9"
    },
    "muted": {
      "$type": "color",
      "$value": "#1a1a1b"
    },
    "muted-foreground": {
      "$type": "color",
      "$value": "#9f9d99"
    },
    "border": {
      "$type": "color",
      "$value": "#2d2d2e"
    },
    "destructive": {
      "$type": "color",
      "$value": "#dc2626"
    },
    "ring": {
      "$type": "color",
      "$value": "#0b0b0c"
    }
  },
  "font": {
    "sans": {
      "$type": "fontFamily",
      "$value": [
        "ui-sans-serif",
        "system-ui",
        "sans-serif"
      ]
    },
    "serif": {
      "$type": "fontFamily",
      "$value": [
        "ui-serif",
        "Georgia",
        "serif"
      ]
    },
    "mono": {
      "$type": "fontFamily",
      "$value": [
        "ui-monospace",
        "SFMono-Regular",
        "Menlo",
        "monospace"
      ]
    }
  },
  "radius": {
    "base": {
      "$type": "dimension",
      "$value": "0px"
    }
  },
  "spacing": {
    "base": {
      "$type": "dimension",
      "$value": "1rem"
    }
  },
  "shadow": {
    "base": {
      "$type": "shadow",
      "$value": "0 1px 2px rgba(0,0,0,0.06), 0 8px 24px rgba(0,0,0,0.04)"
    }
  }
}

CSS

/* powered by Styledex — https://styledex.dev */
/* "Kinetic Typography" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86. */
:root {
  --background: #0b0b0c;
  --foreground: #f4f1eb;
  --card: #0b0b0c;
  --card-foreground: #f4f1eb;
  --primary: #0b0b0c;
  --primary-foreground: #fafaf9;
  --secondary: #f4f1eb;
  --secondary-foreground: #f4f1eb;
  --accent: #ff4d00;
  --accent-foreground: #fafaf9;
  --muted: #1a1a1b;
  --muted-foreground: #9f9d99;
  --border: #2d2d2e;
  --destructive: #dc2626;
  --ring: #0b0b0c;
  --radius: 0px;
  --font-sans: ui-sans-serif, system-ui, sans-serif;
  --font-serif: ui-serif, Georgia, serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
  --spacing: 1rem;
  --shadow: 0 1px 2px rgba(0,0,0,0.06), 0 8px 24px rgba(0,0,0,0.04);
}

Tailwind

/* powered by Styledex — https://styledex.dev */
/* "Kinetic Typography" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86. */
/** Tailwind theme extend for Kinetic Typography (stylekit-kinetic-typography) */
module.exports = {
  "theme": {
    "extend": {
      "colors": {
        "background": "#0b0b0c",
        "foreground": "#f4f1eb",
        "card": "#0b0b0c",
        "primary": "#0b0b0c",
        "primary-foreground": "#fafaf9",
        "secondary": "#f4f1eb",
        "accent": "#ff4d00",
        "muted": "#1a1a1b",
        "border": "#2d2d2e",
        "destructive": "#dc2626",
        "ring": "#0b0b0c"
      },
      "borderRadius": {
        "lg": "0px"
      },
      "fontFamily": {
        "sans": [
          "ui-sans-serif",
          "system-ui",
          "sans-serif"
        ],
        "serif": [
          "ui-serif",
          "Georgia",
          "serif"
        ],
        "mono": [
          "ui-monospace",
          "SFMono-Regular",
          "Menlo",
          "monospace"
        ]
      },
      "boxShadow": {
        "styledex": "0 1px 2px rgba(0,0,0,0.06), 0 8px 24px rgba(0,0,0,0.04)"
      }
    }
  }
};

shadcn

/* powered by Styledex — https://styledex.dev */
/* "Kinetic Typography" from https://github.com/AnxForever/stylekit (MIT). © AnxForever. api/styles/kinetic-typography @ bfa7da909e86. */
@layer base {
:root {
  --background: #0b0b0c;
  --foreground: #f4f1eb;
  --card: #0b0b0c;
  --card-foreground: #f4f1eb;
  --primary: #0b0b0c;
  --primary-foreground: #fafaf9;
  --secondary: #f4f1eb;
  --secondary-foreground: #f4f1eb;
  --accent: #ff4d00;
  --accent-foreground: #fafaf9;
  --muted: #1a1a1b;
  --muted-foreground: #9f9d99;
  --border: #2d2d2e;
  --destructive: #dc2626;
  --ring: #0b0b0c;
  --radius: 0px;
  --font-sans: ui-sans-serif, system-ui, sans-serif;
  --font-serif: ui-serif, Georgia, serif;
  --font-mono: ui-monospace, SFMono-Regular, Menlo, monospace;
  --spacing: 1rem;
  --shadow: 0 1px 2px rgba(0,0,0,0.06), 0 8px 24px rgba(0,0,0,0.04);
}
}