Ein Webflow-Formular in mehrere Schritte teilen — mit Verzweigung, eigenen Fehlertexten und Auswahl-Kacheln.
Tutorial-Video
Lässt sich mit KI umsetzen, der Prompt ist vorbereitet
Live-Demo ansehenCloneable holen
Form Steps macht aus einem gewöhnlichen Webflow-Formular ein Formular mit mehreren Schritten. Das Formular bleibt ein Webflow-Formular: Submit, Erfolgs- und Fehlermeldung, Zapier, Make und alle Integrationen laufen unverändert weiter. Neu ist nur, was zwischen dem ersten Feld und dem Absenden passiert.
Verzweigung: Die Antwort in Schritt 2 entscheidet, welche Schritte danach überhaupt vorkommen.
Eigene Fehlertexte statt der Browser-Sprechblase, pro Feld oder pro Formular.
Pflichtfelder gelten schrittweise: Weiter geht erst, wenn der sichtbare Schritt vollständig ist.
1
Dieses <script> in den Custom Code deines Projekts
Einmal pro Projekt genügt, auch wenn du die Lösung auf mehreren Seiten nutzt: Project Settings → Custom Code → Head Code. Das Skript lädt nebenher und hält das Rendern nicht auf; es läuft erst, wenn die Seite steht, und tut nichts, solange kein fpu-Attribut da ist.
<!-- FlowPowerUser · Form Steps -->
<script defer src="https://cdn.jsdelivr.net/npm/@flowpoweruser/attributes@1/form-steps.js"></script>
2
Aufbau des Formulars wählen
Jeder Schritt ist ein gewöhnlicher Div-Block im Formular. Du baust alle Schritte untereinander im Designer — sichtbar wird immer nur einer. Zwei Wege sind üblich:
Linear — jeder Schritt kommt dran
Empfohlen zum Start
Form Block fpu-form-element="form"
└─ Form
├─ Div Schritt 1 fpu-form-element="step"
├─ Div Schritt 2 fpu-form-element="step"
├─ Div Schritt 3 fpu-form-element="step"
└─ Div Knopfleiste
├─ Button fpu-form-element="prev"
├─ Button fpu-form-element="next"
└─ Submit
Drei bis fünf Schritte in fester Reihenfolge. Zwei Attribute und zwei Knöpfe, mehr braucht es nicht.
Verzweigt — die Antwort entscheidet
Für Funnels
Div Wer bist du? fpu-form-element="step"
fpu-form-step-id="art"
Div Firmendaten fpu-form-element="step"
fpu-form-step-if="kundenart=firma"
Div Privatdaten fpu-form-element="step"
fpu-form-step-if="kundenart=privat"
Div Absenden fpu-form-element="step"
Jeder Schritt bekommt eine ID und eine Bedingung. Wer „Firma“ wählt, sieht die Firmen-Schritte; wer „Privat“ wählt, überspringt sie. Fortschritt und Zähler rechnen automatisch mit dem kürzeren Weg.
3
Diese nötigen Attribute an die Elemente hängen
Auf das FormularForm Block oder Form=
AttributWertBeschreibung
Schaltet die Lösung für dieses Formular ein. Darf am Form Block oder am Form selbst hängen. Pflicht.
Auf jeden SchrittDiv-Block im Formular=
AttributWertBeschreibung
Macht den Div-Block zu einem Schritt. Die DOM-Reihenfolge ist die Reihenfolge der Schritte. Pflicht.
Anzeigename des Schritts. Erscheint in {name} und in Elementen mit step-name.
Stabile ID. Nötig für Sprünge und Bedingungen, empfohlen, sobald sich die Reihenfolge noch ändern kann.
Auf die KnöpfeButton · Link Block · Submit=
AttributWertBeschreibung
Weiter. Prüft vorher den sichtbaren Schritt und bleibt stehen, wenn etwas fehlt. Pflicht.
Zurück. Ohne Prüfung, und folgt dem tatsächlich gegangenen Weg — auch nach einem Sprung.
Absenden. Nur im letzten Schritt aktiv. Ohne dieses Attribut übernimmt die Lösung den nativen Submit-Button des Formulars.
Verzweigen: welche Schritte nach welcher Antwort kommen
Zwei Wege führen zum Ziel, und sie lassen sich mischen. Eine Bedingung am Schritt entscheidet, ob der Schritt überhaupt zum Weg gehört. Ein Sprungziel an der Antwort schickt direkt zu einem bestimmten Schritt. Übersprungene Schritte zählen weder im Fortschritt noch im Zähler, werden nicht geprüft und ihre Felder werden abgeklemmt — sie landen also auch nicht im Submit.
Am SchrittBedingung und Sprungziel=
AttributWertBeschreibung
Der Schritt gehört nur zum Weg, wenn der Ausdruck wahr ist. Feldname links, Wert rechts.
Ziel-ID für Sprünge. Ohne ID zählt die Position des Schritts.
Standard-Ziel nach diesem Schritt. Wird von einem Ziel am Knopf oder an der Antwort überstimmt.
An der AntwortRadio · Checkbox · Option · Weiter-Knopf=
AttributWertBeschreibung
Ist diese Antwort gewählt, geht Weiter direkt zu dem Schritt mit dieser ID. Am Weiter-Knopf gilt das Ziel immer.
Ausdrücke in step-ifgleiche Syntax wie fpu-condition
AttributBeschreibung
Gleichheit, Groß- und Kleinschreibung egal, Zahlen werden als Zahlen verglichen.
Ungleichheit.
Mehrere erlaubte Werte für dasselbe Feld.
Zahlvergleich, auch mit <, > und <=. „19,99“ wird verstanden.
Nur der Feldname: wahr, sobald das Feld angehakt oder gefüllt ist.
UND — beide Teile müssen stimmen.
ODER — bindet schwächer als UND, klammert also die UND-Gruppen.
Drei Antworten, drei Wege
<!-- Schritt 2: die Auswahl -->
<div fpu-form-element="step" fpu-form-step-id="auswahl">
<label><input type="radio" name="ziel" value="website"> Website</label>
<label><input type="radio" name="ziel" value="shop"> Onlineshop</label>
<label><input type="radio" name="ziel" value="support"> Support</label>
</div>
<!-- Danach kommt nur, was zur Antwort passt -->
<div fpu-form-element="step" fpu-form-step-if="ziel=website">…</div>
<div fpu-form-element="step" fpu-form-step-if="ziel=shop">…</div>
<div fpu-form-element="step" fpu-form-step-if="ziel=support">…</div>
<!-- Immer am Ende -->
<div fpu-form-element="step" fpu-form-step-id="absenden">…</div>
5
Eigene Fehlertexte statt der Browser-Sprechblase
Ohne Zutun prüft die Lösung beim Weiter alle sichtbaren Felder des Schritts und zeigt die Browser-Sprechblase. Sobald du irgendwo im Formular ein Fehler-Element setzt, wandert der Text dorthin — gestaltet im Designer, sichtbar nur im Fehlerfall. Was geprüft wird, kommt weiter aus den gewohnten Webflow-Feldeinstellungen (Required, Typ, Muster, Länge).
Wann geprüft wirdAm Formular oder am einzelnen Schritt=
AttributWertStandardBeschreibung
stepBeim Klick auf Weiter wird der sichtbare Schritt geprüft.
Zusätzlich beim Verlassen eines Felds — der Fehler steht sofort, nicht erst am Schrittende.
Erst beim Absenden, dafür über alle Schritte des gegangenen Wegs.
Keine eigene Prüfung. Sinnvoll für einen einzelnen Zwischenschritt ohne Felder.
Wo der Fehler stehtText-Block im Formular=
AttributWertBeschreibung
Trägt den Fehlertext. Ist von sich aus versteckt und bekommt im Fehlerfall die Klasse fpu-form-error-visible.
Bindet das Element an ein bestimmtes Feld (dessen name oder id) oder an eine Gruppe. Ohne Angabe gilt das nächstgelegene Feld im selben Wrapper.
Optionaler Wrapper um Label, Feld und Fehler. Bekommt im Fehlerfall fpu-form-field-invalid — praktisch für einen roten Rahmen.
Zusammenfassung oben im Schritt: eine Liste aller Fehler, jeder Eintrag springt zum Feld.
Was der Fehler sagtAm Feld, sonst am Formular=
AttributWertBeschreibung
Pflichtfeld ist leer. Platzhalter {label} setzt den Feldnamen ein.
Auch -url, -tel, -number und -pattern gibt es. Am Formular gesetzt gelten sie für alle Felder.
Dazu -maxlength, -min, -max und -step. {min} und {max} setzen die Grenze ein.
Eine Meldung für jeden Fehler dieses Felds — praktisch, wenn ein Feld nur einen Fehlerfall hat.
Klartextname für {label}. Ohne das Attribut wird das Label, sonst der Platzhalter, sonst der Feldname genommen.
Ein Feld mit eigenem Fehlertext
<div fpu-form-element="field">
<label for="mail">E-Mail</label>
<input id="mail" name="e-mail" type="email" required
fpu-form-label="deine E-Mail"
fpu-form-message-required="Ohne {label} können wir nicht antworten."
fpu-form-message-email="Da fehlt noch das @.">
<div fpu-form-element="error" fpu-form-error-for="e-mail"></div>
</div>
6
Projekt veröffentlichen und das Formular auf der Live-Site durchklicken
Attribute wirken erst auf der veröffentlichten Seite — im Designer bleibt der Stapel aus Schritten sichtbar, das ist richtig so. Passiert nichts, hilft fpu-form-logging=„true“ am Formular: die Konsole meldet dann in einer Zeile, wie viele Schritte gefunden wurden und wie viele davon gerade zum Weg gehören.
OptionalBrauchst du nur, wenn du es brauchst. Aufklappen
OptionalFortschritt, Zähler und IndikatorenBalken, „Schritt 2 von 4“, Punktleiste
Alle drei rechnen mit dem aktuellen Weg: Fällt ein Schritt durch eine Verzweigung weg, zählt er nirgends mit. Die Elemente dürfen auch außerhalb des Formulars liegen — dann verbindet sie fpu-form-instance mit dem richtigen Formular.
Anzeige-Elemente
AttributWertElementBeschreibung
Div BlockFortschrittsbalken. Die Breite wird in Prozent gesetzt, den Rest macht dein Styling.
Text BlockZähler-Text. Standard „Schritt {current} von {total}“.
Text BlockEigenes Zähler-Format. Am Zähler-Element oder am Formular. Platzhalter: {current}, {total}, {name}.
Text BlockZeigt den Namen des aktuellen Schritts (fpu-form-step-name).
Div BlockEin Punkt bzw. Reiter je Schritt, in DOM-Reihenfolge. Klickbar, aber nur zu bereits besuchten Schritten. Klassen: fpu-form-indicator-active, -visited, -locked.
Div BlockBindet einen Indikator fest an eine Step-ID. Ohne diese Bindung zählt die Position, und überzählige Indikatoren werden ausgeblendet.
Webflow kann Radios und Checkboxen gestalten, aber nicht als ganze Kachel klickbar machen und nicht „mindestens eine Auswahl“ erzwingen. Genau das ergänzt diese Lösung. Für gestaltete Dropdowns bleibt das native Select das Formularfeld — kombiniere es mit fpu-select (Custom Form Select); Fokus und Fehlermarkierung landen dann automatisch auf dem sichtbaren Auslöser.
Auswahl-Kachel
Div-Block mit Radio oder Checkbox darin
AttributWertBeschreibung
Die ganze Fläche wird klickbar. Bei ausgewählter Antwort trägt sie fpu-form-choice-selected — dein Styling für den gewählten Zustand. Ist der Input optisch versteckt, übernimmt die Kachel Fokus und Tastatur.
Gruppe aus Radios oder Checkboxen
Div-Block um alle Antworten
AttributWertBeschreibung
Fasst die Antworten zu einer Einheit zusammen. Erst dann kann eine Auswahl Pflicht sein und einen eigenen Fehlertext bekommen.
Mindestens eine Auswahl. Weiter geht erst danach.
Mindestzahl an Haken bei Checkbox-Gruppen.
Höchstzahl an Haken bei Checkbox-Gruppen.
Name der Gruppe. Ein Fehler-Element mit fpu-form-error-for=„interessen“ zeigt dann deren Meldung.
Eigener Text für die Gruppe. Dazu -group-min und -group-max mit {min} und {max}.
Nach der Radio-Auswahl automatisch weiter. Auch am Schritt erlaubt. Das Typeform-Muster.
Verzögerung in Millisekunden, damit die Auswahl noch kurz sichtbar bleibt.
OptionalWeitere EinstellungenZwischenspeichern, Scrollen, mehrere Formulare
Am Formular
AttributWertStandardBeschreibung
falseEingaben und den erreichten Schritt in der Sitzung sichern und beim Zurückkommen wiederherstellen. Passwörter, Dateien und versteckte Felder werden nie gespeichert; nach erfolgreichem Absenden wird alles gelöscht.
falseBei jedem Schrittwechsel an den Anfang des Formulars scrollen. Bei langen Schritten fast immer richtig.
Verbindet Elemente außerhalb des Formulars — Fortschritt, Zähler, Indikatoren, Knöpfe — mit genau diesem Formular. Nur nötig, wenn zwei Formulare auf einer Seite stehen.
falseEine Zeile in der Konsole beim Start: Version, Anzahl Schritte, Prüfmodus.
Globale Standards für alle Formulare
<script>
window.fpuFormStepsConfig = {
persist: true,
scroll: true,
validate: "live",
countTemplate: "Schritt {current} von {total}",
messages: {
required: "Das brauchen wir noch.",
email: "Bitte eine gültige E-Mail.",
},
};
</script>
OptionalTastatur, Klassen und Eventsfür Animationen und eigenes Skript
Enter in einem Feld heißt Weiter statt Absenden, außer im letzten Schritt. Alt+Pfeil rechts und links blättern, solange der Fokus nicht in einem Textfeld oder Dropdown liegt. Nach jedem Wechsel springt der Fokus auf das erste Feld des neuen Schritts.
Klassen, die du stylen kannst
AttributBeschreibung
Der gerade sichtbare Schritt.
Ein Schritt, der durch eine Verzweigung gerade nicht zum Weg gehört.
Am fehlerhaften Feld.
Am Feld-Wrapper und an der Gruppe.
An der gewählten Auswahl-Kachel.
An Knöpfen, die im aktuellen Schritt nichts tun können.
Events auf document
AttributBeschreibung
Nach jedem Wechsel. detail: form, index, total, stepId, stepIndex.
Für jede gezeigte Meldung. detail: form, element, message.
Wenn ein Absenden die Prüfung bestanden hat und durchgelassen wird.
Mehr Möglichkeiten
Zusätzliche Features
Webflow-Submit bleibt unangetastet
Die Prüfung läuft vor Webflows eigenem Handler. Ungültige oder verfrühte Absendeversuche erreichen Webflow nie — Erfolgsmeldung, Fehlermeldung und alle angebundenen Dienste verhalten sich wie immer.
Zurück folgt dem echten Weg
Nach einem Sprung führt Zurück dorthin, wo man tatsächlich herkam, nicht zum vorherigen Element im Designer.
Aufräumbar
window.fpuFormSteps.destroyAll() nimmt alle Listener, Klassen und ARIA-Attribute zurück und stellt den Ausgangszustand her — für Seitenübergänge und Single-Page-Umgebungen.
Barrierefrei von Haus aus
Schritte sind Gruppen mit Namen, inaktive Schritte sind inert und für Screenreader weg, der Fortschritt ist eine Progressbar, Fehler werden als Alert angekündigt und mit aria-describedby ans Feld gehängt.