User Story
Als Redakteur:in möchte ich Kennzahlen mit animierten Hochzähl-Effekten auf einer Canvas-Seite einsetzen können, damit Besucher:innen zentrale Zahlen (z. B. Kundenzufriedenheit, abgeschlossene Projekte) einprägsam präsentiert bekommen.
Als Redakteur:in möchte ich Kennzahlen mit animierten Hochzähl-Effekten auf einer Canvas-Seite einsetzen können, damit Besucher:innen zentrale Zahlen (z. B. Kundenzufriedenheit, abgeschlossene Projekte) einprägsam präsentiert bekommen.
| SDC | Verzeichnis | Art |
|---|---|---|
byte_theme:big-numbers |
components/big-numbers/ |
Neu — Canvas-Block-Type, Grid-Container für Items |
byte_theme:big-number-item |
components/big-number-item/ |
Neu — Slot-Child, ein Kennzahl-Element mit Animation |
slider-container / slider-item). big-numbers ist Canvas-Block-Type mit Slots; big-number-item ist Slot-Child-SDC. Reihenfolge via Canvas Drag&Drop.animated_value (number, Pflicht) + format (enum: none | thousands, Default: none) + suffix (string, optional). Beispiel: Wert 9/10 → animated_value: 9, suffix: /10. Wert 100.300 → animated_value: 100300, format: thousands. Wert 95% → animated_value: 95, suffix: %.prefers-reduced-motion: reduce wird der Endwert direkt ohne Animation dargestellt.columns-Prop — flex-Layout mit flex: 1 0 0 auf Items, Gap 32px. Figma-Varianten (3/4/5) entsprechen der natürlichen Item-Anzahl.big-numbers ist transparent, Schrift weiß fix. Dunkler Hintergrund kommt vom umgebenden Section-Block (Standard-Pattern im Theme). Kein eigener Background-Prop.Kein eigener Prop — steuert nur das Grid-Layout. Slots: items (0–5 big-number-item-Instanzen).
| Prop | Typ | Pflicht | Default | Beschreibung |
|---|---|---|---|---|
animated_value | number | ja | — | Der numerische Zielwert der Animation (z. B. 9, 95, 100300) |
format | string enum | nein | none | none: keine Formatierung; thousands: Tausender-Trenner mit . (dt.) |
suffix | string | nein | leer | Statischer Rest nach dem animierten Wert (z. B. %, /10) |
label | string | ja | — | Beschriftungstext unter der Zahl (z. B. „Kundenzufriedenheit") |
| Element | Token / Wert |
|---|---|
| Zahl (animated_value + suffix) | Montserrat ExtraBold, 45px, leading-none, uppercase, weiß |
| Label | Scala Sans LF Regular, 19px, leading-[1.35], weiß |
| Gap (Zahl → Label) | var(--xs, 24px) |
| Gap (Item → Item) | 32px |
| Container-Breite | max 1120px (entspricht Theme-Content-Width) |
Die Animation läuft als Drupal.behaviors-Behavior in einem separaten big-numbers.js-Modul (type: module).
IntersectionObserver beobachtet jeden .big-number-item-Container.animated_value).ease-out.prefers-reduced-motion: reduce wird der Endwert direkt gesetzt, kein Observer nötig.format: thousands: Formatierung mit toLocaleString('de-DE') nach der Animation.suffix wird als statisches <span> neben dem animierten Wert gerendert — nie mitgezählt.byte_theme:big-numbers, die im Canvas-Editor als Block-Type auswählbar und konfigurierbar ist.big-number-item-Instanzen als Slots anlegen, jede mit animated_value, format, suffix und label. Reihenfolge ist via Canvas Drag&Drop steuerbar.X/Y (z. B. animated_value: 9, suffix: /10) zählt ausschließlich X hoch, /Y bleibt statisch. Das Grid-Layout passt sich der Anzahl der Items an (Mobile: 1 Spalte, Tablet: 2 Spalten, Desktop: auto).Test-URL: https://solcom.ddev.site/page/73
big-number-item-Slots anlegen: (1) animated_value: 11, label: Projekte; (2) animated_value: 95, suffix: %, label: Kundenzufriedenheit; (3) animated_value: 1782, format: none, label: Experten; (4) animated_value: 9, suffix: /10, label: Weiterempfehlung; (5) animated_value: 100300, format: thousands, label: Vermittlungen. Alle 5 Items werden gespeichert und im Frontend dargestellt.9/10): nur die 9 zählt, /10 steht während der gesamten Animation statisch daneben.100300, format: thousands): animierter Wert wird am Ende als 100.300 angezeigt (Tausender-Punkt).prefers-reduced-motion: reduce simulieren → Zahlen erscheinen sofort als Endwert, keine Animation.big-numbers selbst hat keinen eigenen Hintergrund (transparent), weiße Schrift ist auf Dark-BG sichtbar.