Skip to main content
Mediaweb Logo

Mediaweb

Html Leitfaden

Formulare in HTML: Ein Anfängerleitfaden

Lernen Sie, wie Sie interaktive HTML-Formulare mit Eingabetypen, Labels, Buttons und grundlegender Validierung erstellen. Meistern Sie Formular-Barrierefreiheit und Best Practices.

September 4, 2025
5 Min. Lesezeit
html
formulare
webentwicklung
barrierefreiheit
benutzereingabe

Was ist das <form>-Element?

Das <form>-Element ist ein Container, der alle Formularsteuerelemente umschließt und definiert, wie die Formulardaten verarbeitet werden sollen. Es fungiert als Grundlage für das Sammeln von Benutzereingaben und deren Übermittlung an einen Server.

Grundlegende Formularstruktur

<form action="/submit" method="POST">
  <!-- Formularsteuerelemente kommen hier hin -->
  <input type="text" name="username" required>
  <button type="submit">Absenden</button>
</form>

Wichtige Formularattribute

  • action: Gibt an, wohin Formulardaten beim Absenden gesendet werden sollen
  • method: Definiert, wie Daten gesendet werden (GET oder POST)
  • enctype: Gibt an, wie Formulardaten kodiert werden sollen (wichtig für Datei-Uploads)
<form action="/contact" method="POST" enctype="multipart/form-data">
  <!-- Formular für Datei-Uploads -->
</form>

Wesentliche Eingabetypen

HTML5 führte zahlreiche Eingabetypen ein, die eine bessere Benutzererfahrung und eingebaute Validierung bieten. Lassen Sie uns die am häufigsten verwendeten erkunden:

Text-Eingabetypen

<!-- Grundlegende Texteingabe -->
<input type="text" name="fullname" placeholder="Geben Sie Ihren vollständigen Namen ein">

<!-- Passwort-Eingabe (verbirgt Zeichen) -->
<input type="password" name="password" placeholder="Passwort eingeben">

<!-- Email-Eingabe (mit eingebauter Validierung) -->
<input type="email" name="email" placeholder="benutzer@beispiel.de">

<!-- Telefonnummer-Eingabe -->
<input type="tel" name="phone" placeholder="+49 (123) 456-7890">

<!-- URL-Eingabe -->
<input type="url" name="website" placeholder="https://beispiel.de">

Spezialisierte Eingabetypen

<!-- Zahleneingabe mit Min/Max-Werten -->
<input type="number" name="age" min="18" max="100" step="1">

<!-- Datumsauswahl -->
<input type="date" name="birthdate">

<!-- Zeitauswahl -->
<input type="time" name="appointment">

<!-- Farbauswahl -->
<input type="color" name="theme-color" value="#ff0000">

<!-- Datei-Upload -->
<input type="file" name="resume" accept=".pdf,.doc,.docx">

Auswahl-Eingabetypen

<!-- Radiobuttons (Einzelauswahl) -->
<input type="radio" name="gender" value="male" id="male">
<input type="radio" name="gender" value="female" id="female">

<!-- Checkboxen (Mehrfachauswahl) -->
<input type="checkbox" name="interests" value="coding" id="coding">
<input type="checkbox" name="interests" value="design" id="design">

<!-- Bereichsschieberegler -->
<input type="range" name="satisfaction" min="1" max="10" value="5">

Labels und Barrierefreiheit

Labels sind entscheidend für die Barrierefreiheit von Formularen. Sie bieten Kontext für Screenreader und verbessern die Benutzerfreundlichkeit für alle Benutzer.

Ordnungsgemäße Label-Verwendung

<!-- Methode 1: Verwendung des 'for'-Attributs -->
<label for="username">Benutzername:</label>
<input type="text" id="username" name="username" required>

<!-- Methode 2: Eingabe innerhalb des Labels umschließen -->
<label>
  E-Mail-Adresse:
  <input type="email" name="email" required>
</label>

Vollständiges barrierefreies Formularbeispiel

<form action="/register" method="POST">
  <fieldset>
    <legend>Persönliche Informationen</legend>
    
    <div class="form-group">
      <label for="first-name">Vorname *</label>
      <input type="text" id="first-name" name="firstName" required 
             aria-describedby="first-name-help">
      <small id="first-name-help">Geben Sie Ihren rechtlichen Vornamen ein</small>
    </div>
    
    <div class="form-group">
      <label for="email">E-Mail-Adresse *</label>
      <input type="email" id="email" name="email" required
             aria-describedby="email-help">
      <small id="email-help">Wir werden Ihre E-Mail niemals weitergeben</small>
    </div>
    
    <div class="form-group">
      <label for="phone">Telefonnummer</label>
      <input type="tel" id="phone" name="phone"
             aria-describedby="phone-help">
      <small id="phone-help">Optional: Ländervorwahl einschließen</small>
    </div>
  </fieldset>
</form>

Buttons und Formularübermittlung

Buttons steuern das Formularverhalten und bieten klare Aktionen für Benutzer.

Button-Typen

<!-- Submit-Button (sendet das Formular ab) -->
<button type="submit">Konto erstellen</button>

<!-- Reset-Button (löscht Formulardaten) -->
<button type="reset">Formular löschen</button>

<!-- Normaler Button (für JavaScript-Interaktionen) -->
<button type="button" onclick="showHelp()">Hilfe benötigt?</button>

Input vs Button-Elemente

<!-- Verwendung des input-Elements -->
<input type="submit" value="Formular absenden">

<!-- Verwendung des button-Elements (flexibler) -->
<button type="submit">
  <span>Formular absenden</span>
  <svg><!-- Symbol --></svg>
</button>

Grundlagen der Formularvalidierung

HTML5 bietet eingebaute Validierung, die ohne JavaScript funktioniert und die Benutzererfahrung und Datenqualität verbessert.

Pflichtfelder

<input type="text" name="username" required>
<input type="email" name="email" required>
<select name="country" required>
  <option value="">Land wählen</option>
  <option value="de">Deutschland</option>
  <option value="at">Österreich</option>
</select>

Muster-Validierung

<!-- Telefonnummer-Muster -->
<input type="tel" name="phone" 
       pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"
       placeholder="123-456-7890">

<!-- Benutzerdefiniertes Benutzername-Muster -->
<input type="text" name="username"
       pattern="[a-zA-Z0-9_]{3,16}"
       title="Benutzername muss 3-16 Zeichen lang sein, nur Buchstaben, Zahlen und Unterstriche">

Längen- und Bereichsvalidierung

<!-- Textlängenbegrenzungen -->
<input type="text" name="title" minlength="5" maxlength="100">

<!-- Zahlenbereiche -->
<input type="number" name="quantity" min="1" max="10">

<!-- Datumsbereiche -->
<input type="date" name="start-date" min="2025-01-01" max="2025-12-31">

Vollständiges Formularbeispiel

Hier ist ein umfassendes Kontaktformular, das alle behandelten Konzepte demonstriert:

<form action="/contact" method="POST" novalidate>
  <fieldset>
    <legend>Kontaktinformationen</legend>
    
    <div class="form-row">
      <div class="form-group">
        <label for="first-name">Vorname *</label>
        <input type="text" id="first-name" name="firstName" 
               required minlength="2" maxlength="50">
      </div>
      
      <div class="form-group">
        <label for="last-name">Nachname *</label>
        <input type="text" id="last-name" name="lastName" 
               required minlength="2" maxlength="50">
      </div>
    </div>
    
    <div class="form-group">
      <label for="email">E-Mail-Adresse *</label>
      <input type="email" id="email" name="email" required>
    </div>
    
    <div class="form-group">
      <label for="phone">Telefonnummer</label>
      <input type="tel" id="phone" name="phone"
             pattern="[0-9]{3}-[0-9]{3}-[0-9]{4}"
             placeholder="123-456-7890">
    </div>
  </fieldset>
  
  <fieldset>
    <legend>Nachrichtendetails</legend>
    
    <div class="form-group">
      <label for="subject">Betreff *</label>
      <select id="subject" name="subject" required>
        <option value="">Betreff wählen</option>
        <option value="general">Allgemeine Anfrage</option>
        <option value="support">Technischer Support</option>
        <option value="billing">Rechnungsfrage</option>
      </select>
    </div>
    
    <div class="form-group">
      <label for="message">Nachricht *</label>
      <textarea id="message" name="message" required
                minlength="10" maxlength="1000" rows="5"
                placeholder="Bitte beschreiben Sie Ihre Anfrage..."></textarea>
    </div>
    
    <div class="form-group">
      <label for="priority">Prioritätsstufe</label>
      <input type="range" id="priority" name="priority"
             min="1" max="5" value="3">
      <output for="priority">3</output>
    </div>
  </fieldset>
  
  <fieldset>
    <legend>Präferenzen</legend>
    
    <div class="form-group">
      <label>
        <input type="checkbox" name="newsletter" value="yes">
        Newsletter abonnieren
      </label>
    </div>
    
    <div class="form-group">
      <fieldset>
        <legend>Bevorzugte Kontaktmethode</legend>
        <label>
          <input type="radio" name="contact-method" value="email" checked>
          E-Mail
        </label>
        <label>
          <input type="radio" name="contact-method" value="phone">
          Telefon
        </label>
      </fieldset>
    </div>
  </fieldset>
  
  <div class="form-actions">
    <button type="reset">Formular löschen</button>
    <button type="submit">Nachricht senden</button>
  </div>
</form>

Best Practices für Formular-Styling

Obwohl sich dieser Leitfaden auf HTML konzentriert, hier sind einige CSS-Tipps für eine bessere Formularpräsentation:

/* Grundlegendes Formular-Styling */
.form-group {
  margin-bottom: 1rem;
}

.form-row {
  display: flex;
  gap: 1rem;
}

label {
  display: block;
  margin-bottom: 0.25rem;
  font-weight: 500;
}

input, select, textarea {
  width: 100%;
  padding: 0.5rem;
  border: 1px solid #ccc;
  border-radius: 4px;
  font-size: 1rem;
}

input:focus, select:focus, textarea:focus {
  outline: none;
  border-color: #007bff;
  box-shadow: 0 0 0 2px rgba(0, 123, 255, 0.25);
}

button {
  padding: 0.75rem 1.5rem;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  font-size: 1rem;
}

button[type="submit"] {
  background-color: #007bff;
  color: white;
}

Häufige Formularfehler vermeiden

  1. Fehlende Labels: Stellen Sie immer Labels für Formularsteuerelemente bereit
  2. Schlechte Fehlerbehandlung: Bieten Sie klare, hilfreiche Fehlermeldungen
  3. Kein Validierungs-Feedback: Zeigen Sie Benutzern, was schief gelaufen ist und wie sie es beheben können
  4. Unzugängliche Formulare: Verwenden Sie ordnungsgemäße ARIA-Attribute und semantisches HTML
  5. Überwältigende Formulare: Teilen Sie lange Formulare in logische Abschnitte auf
  6. Keine Fortschrittsanzeige: Zeigen Sie bei mehrstufigen Formularen den Fortschritt an
  7. Unklare Pflichtfelder: Markieren Sie Pflichtfelder deutlich

Fazit

HTML-Formulare sind essentiell für die Erstellung interaktiver Web-Erfahrungen. Durch das Verständnis des <form>-Elements, verschiedener Eingabetypen, ordnungsgemäßer Beschriftung und grundlegender Validierung können Sie Formulare erstellen, die sowohl funktional als auch barrierefrei sind.

Denken Sie an diese Schlüsselprinzipien:

  • Verwenden Sie immer semantische HTML-Elemente
  • Bieten Sie klare Labels und Anweisungen
  • Implementieren Sie ordnungsgemäße Validierung
  • Berücksichtigen Sie Barrierefreiheit von Anfang an
  • Testen Sie Ihre Formulare mit echten Benutzern

Mit diesen Grundlagen können Sie Formulare erstellen, die hervorragende Benutzererfahrungen bieten und gleichzeitig die Daten sammeln, die Ihre Anwendung benötigt.

Nächste Schritte

  • Lernen Sie über erweiterte Formularvalidierung mit JavaScript
  • Erkunden Sie CSS Grid und Flexbox für Formularlayouts
  • Studieren Sie ARIA-Attribute für verbesserte Barrierefreiheit
  • Üben Sie mit verschiedenen Formularbibliotheken und Frameworks
  • Implementieren Sie serverseitige Formularverarbeitung
Zuletzt aktualisiert: October 3, 2025

Verwandte Artikel

Lesen Sie weiter mit diesen verwandten Artikeln