Beta

Particle Text <mv-particle-text>

Text aus Tausenden Canvas-Partikeln, abgetastet aus der eigenen Schrift des Elements: Sie gleiten von links nach rechts an ihren Platz, fliehen vor dem Zeiger und federn zurück, stieben beim Klick auseinander und strömen zum neuen Wort hinüber, wenn sich der Text ändert, eingefärbt von einem Verlauf, den sie durchwandern.

KategorieAnimierter Text
TypWeb Component (<mv-particle-text>)
StatusBeta
Keywordssafe-rewrite, particles, canvas, text, morph, interactive, hero, repel

When to use

  • A hero title should be drawn by particles that assemble, flee the cursor and explode on click
  • A short word should morph into another with particles flowing into place

Avoid when

  • Low-end mobile or several instances per page; thousands of canvas particles are costly
  • Long text or paragraphs; the canvas is built for a short word or title and shrinks overflowing text
  • A changing number should be drawn in particles → use Particle Counter instead

Installation

node scripts/add.mjs particle-text --out ./src/marvelous

KI-Agent mit dem MCP-Server von Marvelous UI: install_components({ slugs: ["particle-text"], target_dir: "<absolute path>/src/marvelous", framework: "react" }).

Kopierte Dateien (inklusive Abhängigkeiten): tokens/tokens.css, core/base.css, core/canvas.js, core/dom.js, core/element.js, core/motion.js, core/observe.js, components/particle-text/particle-text.js, components/particle-text/particle-text.css.

Verwendung

Referenz-Markup zum Starten und Anpassen mit Attributen, data-* und CSS-Variablen:

<div style="display:grid;gap:.5rem;width:100%;justify-items:center">
  <mv-particle-text id="mv-particle-text-demo" colors="var(--mv-accent), oklch(0.72 0.14 225), oklch(0.75 0.16 345)">Hello</mv-particle-text>
  <div style="display:flex;gap:.5rem;flex-wrap:wrap;justify-content:center">
    <button class="mv-button" data-size="sm" data-variant="outline" data-word="Hello">Hello</button>
    <button class="mv-button" data-size="sm" data-variant="outline" data-word="Marvelous">Marvelous</button>
    <button class="mv-button" data-size="sm" data-variant="outline" data-word="Thanks!">Thanks!</button>
    <button class="mv-button" data-size="sm" data-variant="ghost" id="mv-particle-text-demo-burst">Burst</button>
  </div>
  <p style="margin:.25rem 0 0;font-size:.8rem;color:var(--mv-fg-subtle)">Hover the letters to scatter them, click to make them explode.</p>
  <mv-particle-text text="2026" style="font-size:3.5rem;max-width:320px;margin-top:.5rem" radius="50"></mv-particle-text>
</div>
<script type="module">
  const pt = document.getElementById("mv-particle-text-demo");
  for (const b of document.querySelectorAll("[data-word]")) b.addEventListener("click", () => { pt.text = b.dataset.word; });
  document.getElementById("mv-particle-text-demo-burst").addEventListener("click", () => pt.burst());
</script>

API

Attributes

NameTypDefaultDescription
textstringText (otherwise the element content). Changing it triggers a morph.
colorslist of CSS colorsvar(--mv-particle-text-color)One color, or several for a left-to-right gradient laid over the text; particles take the color of where they are (tokens accepted, they follow the theme).
triggerview | hover | load | manualviewWhen the particles assemble (manual: call assemble()).
gapnumberauto (2-8)Sampling step in px (smaller = more particles, capped at 7,000; auto keeps the count under the cap).
sizenumbergap × 0.86Particle side length (px).
radiusnumber90Cursor influence radius (px).
strengthnumber1Repulsion strength.

Methods

NameDescription
assemble()Assembles the particles into text.
burst(x?, y?)Explodes the particles from a point (local coordinates, center by default).

Events

NameDescription
mv-settleAll particles are back in place (the loop stops).

CSS variables

NameDefaultDescription
--mv-particle-text-colorvar(--mv-fg)Default color.

Accessibility

The text stays available as visually hidden text for screen readers; the canvas is aria-hidden. Font family, weight and size come from the element's CSS (the text shrinks if it overflows). Reduced motion: text is assembled immediately, with no repulsion or explosion. Forced colors: particles use the system text color. The loop pauses off-screen and stops when idle.

Diese Seite wurde mit KI übersetzt. Übersetzungsfehler melden