diff --git a/public/images/month-picker.jpeg b/public/images/month-picker.jpeg
new file mode 100644
index 0000000..aaef7d4
Binary files /dev/null and b/public/images/month-picker.jpeg differ
diff --git a/src/components/slides/html-forms/basics.astro b/src/components/slides/html-forms/basics.astro
new file mode 100644
index 0000000..fbc027d
--- /dev/null
+++ b/src/components/slides/html-forms/basics.astro
@@ -0,0 +1,153 @@
+
+
+ Alle abzufragenden Inhalte werden in ein spezielles Das Das Es empfiehlt sich, jedes Eingabefeld mit einem Der Nutzer versteht einfacher, was er eingeben muss und zusätzlich erhält der Screenreader mehr Informationen zum vorlesen. Das erste Tag, um Daten einzugeben, ist Mithilfe von Input können alle Text-Relevanten Informationen eingegeben werden. Das Tag bietet Attribute um die gewünschte Eingabe zu verfeinern. Wir können auch ein Textfeld im Voraus ausfüllen, nutze dafür das Das Mithilfe von Mithilfe der Attribute Mithilfe eines Der Browser verwendet die Daten aus dem Form-Tag (action + method), sowie die Eingaben aus den Formular-Feldern. Der Browser versendet die Daten als key-value-Paare. Dabei wird das Dieser Eingabetyp erstellt "Radioboxen", Elemente die gruppiert werden können und nur ein Element gleichzeitig ausgewählt sein darf. Hinweis: Alle Inputs wurden mit einem Label versehen
+
+
+
+
+
+
+
+
+
+ Checkboxen erlauben eine Hinweis: Dieser Checkbox wurde zusätzlich ein Label hinzugefügt Das Eine Wenn mehrere Optionen Auswählbar sein sollen, lässt sich dies mit dem Dabei wird das Falls eine Option mit leerem Wert ( Weiter lassen sich die Optionen in einem Select bietet (auch heutzutage) einen großen Nachteil: Die Elemente sind schwer zu stylen. Falls eine visuell ansprechendere Komponente gewünscht ist, muss eine eigene implementiert werden (inklusive Unterstüztung von Barrierefreiheits-Features) Alternativ bietet sich auch die Nutzung von Komponenten-Bibliotheken an.Basics eines Formulars
+ form
-Tag platziert
+
+ <form action="https://example.com/" method="get">
+ <!-- Hier kommen die Eingabe-Felder hinein -->
+ </form>
+
action
-Attribut definiert wohin die Daten gesendet werden, wenn der User auf "absenden" klickt.method
-Attribut definiert wie die Daten versendet werden (HTTP-Methode)Label & Eingabefeld
+ label
-Tag zu versehen.input
.
+
+ <form action="https://example.com/" method="get">
+ <p>
+ <label for="name">Dein Name:</label>
+ <input type="text" id="name" name="username">
+ </p>
+ </form>
+
value
Attribut!
+
+ <form action="https://example.com/" method="get">
+ <p>
+ <label for="name">Dein Name:</label>
+ <input
+ type="text"
+ id="name"
+ name="username"
+ value="Hier könnte deine Werbung stehen!"
+ >
+ </p>
+ </form>
+
+
+ <form action="https://example.com/" method="get">
+ <p>
+ <label for="name">Dein Name:</label>
+ <input
+ type="text"
+ id="name"
+ name="username"
+ value="Hier könnte deine Werbung stehen!"
+ >
+ </p>
+ </form>
+
for
-Attribut des Labels sollte dem id
-Attribute des referenzierten Eingabefeldes entsprechen.
+ textarea
für größere Texteingaben<textarea>
kann eine Eingabebox mit variabler Größe erzeugt werden
+
+ <textarea>
+ Hier steht ein default-value Text
+ <textarea>
+
cols
und rows
kann die Textarea eine bestimmte Anfangs-Größe Einnehmen
+
+ <textarea cols="50" rows="10"><textarea>
+
Beam me up!
+ button
um Daten zu versenden<button>
kann das Formular abgeschickt werden.
+
+ <button type="submit">Absenden</button>
+
name
-Attribut von jedem Eingabefeld als key verwendet.Eingaben über Texte hinaus
+ input
und weiteren Elementen zusätzliche Eingabemöglichkeiten
+
+ input type="radio"
+
+ <input type="radio" name="frucht" id="apfel" value="Apfel">
+ <input type="radio" name="frucht" id="birne" value="Birne">
+ <input type="radio" name="frucht" id="banane" value="Banane">
+
+
+ name
+ input type="checkbox"
true/false
Abfrage beim User im Stil einer anklickbaren Checkbox
+
+
+ <input type="checkbox" name="akzeptiert" id="accepted">
+
Lange Listen:
+ select
select
-Element erlaubt es, lange Listen in einem extra Container mit einer Scrollbar anzuzeigen.
+
+ <select name="animals">
+ <option value="cat">Katze</option>
+ <option value="dog">Hund</option>
+ <option value="bird">Vogel</option>
+ </select>
+
option
mit value=""
dient als Anzeige eines noch nicht ausgewählten Wertes
+
+ <select name="animals">
+ <option value="">Biete wähle ein Tier</option>
+ <option value="cat">Katze</option>
+ <option value="dog">Hund</option>
+ <option value="bird">Vogel</option>
+ </select>
+
multiple
-Attribut verwirklichen.select
als eine Box mit mehrere Zeilen (mit Scroll) dargestellt. Mehrere Optionen können gleichzeitig mit STRG/CMD ausgewählt werden.value=""
) existiert, kann dieses mit dem Attribut disabled
nicht Anwählbar angezeigt werden.
+
+ <select name="animals">
+ <option value="" disabled>Biete wähle ein Tier</option>
+ <option value="cat">Katze</option>
+ <option value="dog">Hund</option>
+ <option value="bird">Vogel</option>
+ </select>
+
select
mithilfe des Tag optgroup
kategorisieren
+
+ <select name="animals">
+ <optgroup label="Katzenrassen">
+ <option value="bsh">British Shorthair</option>
+ <option value="mc">Maine Coon</option>
+ </optgroup>
+ <optgroup label="Hunderassen">
+ <option value="gs">Schäferhund</option>
+ <option value="poodle">Pudel</option>
+ </optgroup>
+ </select>
+
Bisher haben wir nur das Standard-Textfeld zur Eingabe von Text verwendet.
+type
beim <input>
Soweit haben wir bei Inputs das Attribut type
als text
definiert.
Das Textfeld kann aber spezialisiert werden um Eingaben zu sammeln
+password
+ <input type="password" value="geheim">
+
+ number
+ <input type="number" value="5">
+
+ max
& min
um Grenzen nach oben und unten zu seztenstep
um Schritte anzugeben (Pfeile)number
+ <input type="number" min="1" max="10" step="2" value="1">
+
+ range
Eine weitere Möglichkeit, Zahlen einzugeben, besteht darin einen Slider anzuzeigen
+
+ <input type="range" min="1" max="10" step="1" value="1">
+
+ Nachteil: Ohne Feedback und Anzeige des aktuellen Wertes, eher sinnlos
+Man sieht, nicht alle Werte bewirken etwas auffälliges, manche Types helfen aber auf mobilen Geräten.
+color
+ <input type="color" value="#00ff00">
+
+ file
+ <input type="file">
+
+ url
für URL'semail
für E-Mail Adressentel
für Telefonnummernsearch
für SucheingabenManche Eingabearten validieren die Eingabe, wenn ein User auf "submit" drückt.
+Oft wird aber mittels Javascript eine komplexere Validierung implementiert (die meist schon Hinweise nach der Eingabe in einem Textfeld auf fehler hinweist)
+Bisher haben wir HTML nur dazu verwendet, etwas anzuzeigen.
+Aber natürlich hat jeder von uns schon einmal Daten in irgendeiner Form auf einer Website eingegeben
+🍕
++ Wenn auch vieles heutzutage auf Apps gemacht wird, wird euch regelmäßig eine Webform innerhalb einer App über den Weg laufen. +
+
+ Mithilfe der Tags fieldset
und legend
können Zusammenhängende Abschnitte in einem Formular zusammengefasst werden.
+
+ Die Tags haben keinen Einfluss darauf, wie die Daten versendet werden. +
+
+ <form>
+ <fieldset>
+ <legend>Name</legend>
+ <p>
+ <label for="vorname">Vorname</label>
+ <input id="vorname" name="firstname" type="text">
+ </p>
+ <p>
+ <label for="nachname">Nachname</label>
+ <input id="nachname" name="lastname" type="text">
+ </p>
+ </fieldset>
+ </form>
+
+ fieldset
gepackt werden und zusätzlich mit einem legend
Beschrieben werden
+ Disclaimer Vorweg:
+Vertraue niemals von Nutzern eingegebene Daten, selbst wenn eine (Vor)-Validierung im Frontend geschieht!
+Es sollte sowohl auf der Frontend als auch auf der Backend-Seite validiert werden. Der Nutzer sieht was er falsch gemacht hat und auf der Server-Seite kann man von "sicheren" Daten ausgehen.
+Validierung im Frontend passiert auf 2 Arten:
+Diese Präsentation fokusiert sich auf Attribute die den Tags mitgegeben werden können.
+Drückt ein Nutzer auf den Absende-Button, so validiert der Browser alle Eingabefelder innerhalb des form
-Elementes
Das Verhalten bei einer Fehlerhaften Eingabe variiert von Browser zu Browser
+Das Attribut required
kann als "boolsches" Attribut ohne Wert in einer Komponente stehen.
Sie sorgt dafür, dass der User einen Wert eingeben haben muss, bevor das Formular durch den Browser versendet wird.
+
+ <form>
+ <label for="input">Eingabe</label>
+ <input type="text" id="input" required>
+ <input type="submit">
+ </form>
+
+ minlength & maxlength
Mithilfe der Attribute minlength & maxlength
kann bei Text-Basierten Eingaben auf eine mindestlänge des Eingegebenen Textes (Zeichenlänge) erzwungen werden.
+ <form>
+ <label for="input">Eingabe (3-15 Zeichen)</label>
+ <input type="text" id="input" minlength="3" maxlength="15">
+ <input type="submit">
+ </form>
+
+ Das Attribut maxlength
sorgt dafür, dass auch nach dem 15. Zeichen kein weiteres Eingegeben werden kann.
minlength
führt bei zu wenigen Zeichen zum gleichen Effekt wie beim Attribut required
(aber mit einer spezifischen Fehlermeldung)
min & max
Wie bereits in einer vorherigen Slide gesehen, dienen die Attribute min & max
dazu, obere sowie untere Grenzen in einer Zahleneingabe festzulegen.
+ <form>
+ <label for="input">Eingabe Zahl (1 bis 10)</label>
+ <input type="number" id="input" min="1" max="10" value="1">
+ <input type="submit">
+ </form>
+
+ pattern
Pattern bietet ein Effektives mittel um komplexe Anforderungen an Texte zu prüfen
+Das Pattern wird mithilfe eines regulären Ausdrucks (Regular Expression) definiert
+
+ <form>
+ <label for="input">Eingabe (banane oder kirsche)</label>
+ <input type="text" id="input" pattern="banane|kirsche">
+ <input type="submit">
+ </form>
+
+ type
?!Wie vielleicht bereits beobachtet, haben Eingabefelder wie z.B. type="email"
bereits eine selber eingebaute Validierung.
Diese Validierung "reicht" aber zumeist nicht und wird mithilfe von pattern
und JavaScript erweitert um den Anforderungen gerecht zu werden.