Mit Hilfe des mobilen Formular-Interaktionsdesigns von Matt Smith erstellen wir eine beeindruckende Formular-Interaktion für das Web, die sowohl mit HTML als auch mit HTML, CSS und JavaScript zugänglich ist.
Formulardesign und Interaktion im Web können ein sensibles Thema sein. Eine Vielzahl von Formularzugriffsbedenken und Best Practices kann das Entwerfen einer überzeugenden Formularinteraktion sehr schwierig machen, im Gegensatz zum Formulardesign auf nativen Plattformen.
Matt Smith hat kürzlich eine überzeugende Formularinteraktion erstellt, die er bei Dribbble gepostet hat:
Diese Formularinteraktion wurde zwar für eine native iOS-Anwendung entwickelt, kann jedoch mithilfe von HTML, CSS und Javascript für das Web erneut erstellt werden, wobei auch die Bedenken hinsichtlich des Zugriffs auf das Formular beseitigt werden.
Das Float-Label-Konzept hat einige Aufmerksamkeit erregt, was zu Diskussionen und Experimenten im gesamten Web geführt hat.
Wirklich coole Demo von @zelph http://t.co/Szw1bE2tib, die die super tolle Float-Label-Form-Interaktion http://t.co/NhKfErgd2Q von @mds implementiert
- Brad Frost (@brad_frost) 23. Oktober 2013
Anstatt die gleichen Formularfelder in Matts Design zu verwenden, erstellen wir ein einfaches Kontaktformular, das Sie auf Ihrer eigenen Website verwenden können. Also lass uns eintauchen!
Lassen Sie uns zunächst die Form-Interaktionen beobachten und aufzeichnen, die Matt erstellt hat. Auf diese Weise können wir vorgeben, wie unsere Form gestaltet werden soll. Dadurch erhalten Sie auch ein gutes Verständnis dafür, wie Sie das Formular gestalten und seine Interaktionen mit JavaScript erstellen.
Das Formular enthält die folgenden Elemente, in die wir übersetzen können HTML:
Elemente
Elemente
ElementPlatzhalter
AttributeDurch die Beobachtung der Interaktionen, die Matt erstellt hat, können wir Regeln für die Interaktion der Formularelemente formulieren, die wir erstellen werden. Diese Regeln werden beim Erstellen unserer Markup-, Stilregeln und JavaScript-Interaktionen hilfreich sein.
Elemente
&
Elemente:
Elemente
&
Elemente:
Elemente
&
Elemente:
Elemente
&
Elemente: Nun haben wir die Form bestimmt HTML Elemente zusammen mit ihren Interaktionsregeln können wir damit beginnen, sie zu erstellen.
Beginnen wir mit dem grundlegenden Starter-Code.
Kontaktiere mich
Nun erstellen wir das Markup für unser Formular:
Kontaktiere mich
Hier richten wir einen Formularcontainer mit einer Überschrift "Contact Me" und den entsprechenden Formularelementen in Listenelementen ein. Beachten Sie, dass wir auch das E-Mail-Feld zugewiesen haben type = "email"
. Dies bietet kontextabhängige virtuelle Tastaturen für Geräte, die diese unterstützen, sowie eine einfache, vom Browser unterstützte Überprüfung für Browser, die HTML5-Eingabetypen unterstützen. Für diejenigen, die dies nicht tun, wird es zu einem einfachen Textfeld.
Was wir jetzt haben, sind die Grundlagen eines Formulars, das überall funktioniert und ordnungsgemäß strukturiert ist, um einen einfachen Zugriff zu ermöglichen.
Hinweis: In diesem Lernprogramm wird nicht die serverseitige Formularübergabe behandelt. Sie können also die Übermittlungsmethode des Formulars nach Bedarf ändern.
Wir haben jetzt ein Arbeitsformular in HTML. Jetzt machen wir unseren ersten Schritt zur schrittweisen Verbesserung: Anwenden CSS Stile. Lassen Sie uns Stile erstellen, um unser Formular optisch ansprechender zu gestalten, und dabei auch daran zu denken, dass das Formular funktional und zugänglich bleibt.
Lassen Sie uns ein einfaches Styling für den Seiten- und Formularcontainer erstellen. In dem In unserem Dokument haben wir einen Link zu einer Datei mit dem Namen erstellt
styles.css
, Daher erstellen wir diese Datei jetzt und speichern sie im Stammverzeichnis unseres Projekts.
Wir beginnen mit dem Import der Stile von Eric Meyer CSS In unsere eigene Datei zurücksetzen. Sie können diese Stile hier greifen und in Ihr eigenes Stylesheet kopieren.
Als Nächstes erstellen wir einige allgemeine Seitenstile:
/ * General ==================================== * / *, *: vorher, *: danach -moz-box-size: border-box; -webkit-box-dimensionierung: border-box; Box-Dimensionierung: Border-Box; body background: # eaedf1; body, input, textarea font: 1em / 1.5 Arial, Helvetica, serifenlos; .container max-width: 25em; Marge: 2em Auto; Breite: 95%; .title font-size: 1.5em; Auffüllen: .5em 0; Text ausrichten: Mitte; Hintergrund: # 323a45; Farbe weiß; Grenzradius: 5px 5px 0 0;
Sie werden feststellen, dass wir beim Anpassen von Formularen den Ansatz von Paul Irish für das Box-Modell verwenden: Box-Dimensionierung: Border-Box;
.
Jetzt haben wir etwas besseres, aber es wird noch mehr Arbeit nötig sein.
Wenden wir einige Stile auf unsere Formularelemente an. Dadurch wird unser Formular dem von Matt ähnlicher.
Zuerst werden wir die Listenelemente gestalten, die unsere Formularelemente enthalten.
/ * Form ==================================== * / .form ul background: white; Rand unten: 1em; .form li border: 1px solid #ccc; Rand unten: 0; Rand unten: 0px; Position: relativ; .form li: first-child border-top: 0; .form li: last-child border-bottom: 1px solid #ccc;
Jetzt haben wir alle unsere Formularelemente visuell enthalten. Sie sollten so etwas haben:
Gestalten Sie unsere Formularelemente weiterhin so, dass sie dem Design von Matt entsprechen, und berücksichtigen Sie dabei auch die Einschränkungen der Barrierefreiheit des Webs.
Formatieren Sie die Eingabefelder als große Elemente auf Blockebene im Formular:
Beschriftung, Eingabe, Textbereich Anzeige: Block; Grenze: 0; Eingabe, Textbereich Breite: 100%; Höhe: 100%; Polsterung: 2.25em 1em 1em; Umriss: 0; textarea height: 16em; Größe ändern: keine;
Sie sollten so etwas haben:
Dann stylen Sie das Formular Elemente, die etwa ein Drittel des Weges von der Spitze jedes Eingabeblocks positioniert sind.
label font-size: .8125em; / * 13/16 * / Position: absolut; oben: 1,23 em; links: 1,23 em; Farbe: # f1773b; Deckkraft: 1;
Hinweis: hast du das bemerkt? Opazität
Regel? Wir werden diese Eigenschaft verwenden (zusammen mit der oben
Eigenschaft) um das zu animieren Element später mit JavaScript.
Sie sollten etwas haben, das dem Formdesign von Matt sehr ähnlich sieht.
Als nächstes müssen Sie den Formularsenden-Button formatieren.
Eingabe [Typ = "Senden"] Hintergrund: # f1773b; Rand unten: 1em; Farbe weiß; Grenzradius: 3px; Polsterung: .75em; -webkit-erscheinung: keine; / * Standardbrowser entfernen
Beachten Sie, dass wir die Attributauswahl verwendet haben, um nur die Schaltfläche "Senden" als Ziel festzulegen. Wir haben einige grundlegende Stile zusammen mit einer einfachen Interaktion in der :schweben
und :aktiv
Status (ältere Browser, die nicht unterstützt werden) CSS verwandelt sich
hat einfach keine ausgefallene Interaktion, aber die Form funktioniert immer noch). Sie sollten jetzt so etwas haben:
Unser Formular wurde in einer Weise gestaltet, die dem Design von Matt ähnelt, aber auch darauf zugeschnitten ist, die Bedenken hinsichtlich der Barrierefreiheit des Webs zu besänftigen. Beachten Sie, dass ohne JavaScript auf das Formular immer zugegriffen werden kann, während die Formularfelder jederzeit angezeigt werden. Für Benutzer mit älteren Browsern, die das nicht unterstützen Platzhalter
Attribut können sie weiterhin die Formularfelder sehen und feststellen, welche Informationen von ihnen benötigt werden.
zusätzlich und
Elemente decken den gesamten Formularfeldblock ab, sodass der Zielbereich für jeden Eingang ziemlich groß und zugänglich ist.
Beispielsweise würde das Formular an dieser Stelle in Internet Explorer 8 aussehen:
Wir sollten jetzt darüber nachdenken, wie die mit JavaScript erstellte Interaktion von Matt implementiert werden kann. Dies erreichen wir weitgehend durch Hinzufügen und Entfernen CSS Klassen.
Sie werden es kurz vor dem Abschluss bemerken tag setzen wir einen Link zu unserer benutzerdefinierten JavaScript-Datei mit dem Namen
scripts.js
. Wir können diese Datei jetzt erstellen und dem Browser mitteilen, dass er den Code ausführen soll DOM ist bereit:
$ (document) .ready (function () // Unser Code hier);
Platzhalter
UnterstützungFalls Sie dies nicht bemerkt haben, hängt diese Interaktion stark von der Platzhalterunterstützung ab. Das Platzhalterattribut wird in modernen Browsern weitgehend unterstützt. Da unsere Formularinteraktion von der Platzhalterunterstützung abhängt, testen wir zunächst, ob der Browser Platzhaltertext unterstützt. In diesem Fall implementieren wir die Formularinteraktion. Wenn dies nicht der Fall ist (IE8 & IE9), stellen wir einfach die Basisform ohne JavaScript-Interaktion bereit. Progressive Verbesserung für den Sieg!
Lassen Sie uns zunächst jQuery verwenden $ .support ()
um zu sehen, ob der Browser Platzhaltertext unterstützt. Dies wird gesetzt $ .support.placeholder
true oder false, abhängig von der Unterstützung des Browsers für Platzhaltertext.
// Test auf Platzhalter-Unterstützung $ .support.placeholder = (function () var i = document.createElement ('input'); return 'placeholder' in i;) ();
Wenn Platzhaltertext unterstützt wird, können Sie das ausblenden Elemente auf der Seite laden. Wie bereits erwähnt, wird durch das Ausblenden der Etiketten mit JavaScript nach dem Laden der Seite sichergestellt, dass Browser mit deaktiviertem JavaScript (und solche ohne Platzhalterunterstützung) das Formular weiterhin verwenden können.
// Labels standardmäßig ausblenden, wenn Platzhalter unterstützt werden, wenn ($. Support.placeholder) $ ('. Form li'). Each (function () $ (this) .addClass ('js-hide-label'); ); // Code zum Hinzufügen / Entfernen von Klassen hier
Beachten Sie, dass wir jedem Listenelement eine Klasse hinzugefügt haben js-hide-label
. Dies liegt daran, dass gemäß den Interaktionsregeln zu Beginn des Lernprogramms die Standardausgabe des Formulars die Beschriftungen des Formularfelds ausgeblendet hat. Das js-hide-label
Die Klasse wird auf das übergeordnete Element angewendet Elemente, wenn der Nachkomme
Das Element enthält keinen Benutzerinhalt.
Um das Verständnis und die Wartbarkeit des Codes zu verbessern, setzen wir den von uns hinzugefügten oder entfernten Klassen JavaScript mit 'js' voran. Lassen Sie uns diese Klasse zu unserem Stylesheet hinzufügen und alle Nachkommen ausblenden Etikette
Elemente aus der Sicht. Erinnern Sie sich, wie wir das benutzen würden Opazität
Regel? Hier verwenden wir es, um das zu verbergen Elemente:
.js-hide-label label Deckkraft: 0; oben: 1.5em
Hinweis: Das Opazität
Diese Eigenschaft wird in allen modernen Browsern unterstützt. IE8 wird es nicht erkennen, aber das ist in Ordnung, weil IE8 auch keine Platzhalterattribute unterstützt. Daher führen wir kein JavaScript aus, um die Klasse in IE8 anzuwenden. Win-Win!
Wenn Sie genau hinschauen, zeigt das Interaktionsdesign von Matt, dass die Beschriftungen des Formularfelds nicht nur erscheinen und verschwinden, sondern auch mit ein wenig Auf- und Abbewegung. Da unsere Etikettenelemente absolut positioniert sind, kann der Browser diesen Effekt ändern, wenn wir eine Klasse hinzufügen, die ihre obere Position (oder links, rechts oder unten) ändert. Alles, was wir tun müssen, ist, dem Label selbst eine Übergangseigenschaft hinzuzufügen.
Gehen wir zu unserem zurück Etikette
Element in der CSS und fügen Sie eine Übergangseigenschaft für die oben
und Opazität
Eigenschaften:
label -webkit-transition: .333s erleichtern die Oberseite, .333s verringern die Deckkraft; Übergang: .333s Nach oben, .333s Nachgiebigkeit;
Auf diese Weise können die Etiketten nicht nur glatt erscheinen und verschwinden, sondern auch, wenn sie vollständig undurchsichtig oder transparent werden.
Sie sollten jetzt etwas Ähnliches haben, wenn Sie die Seite laden (natürlich in einem modernen Browser)..
Wie bereits erwähnt, werden Klassen hinzugefügt und entfernt Elemente und zielen auf alle Kinder ab, die Styling benötigen. An diesem Punkt (beim Laden der Seite) haben wir eine Klasse hinzugefügt
js-hide-label
das verbirgt alle Etiketten im Formular. Jetzt brauchen wir eine weitere Klasse, um die Hervorhebungsfarbe aus dem zu entfernen Elemente:
.js-unhighlight-label label color: # 999
Jetzt haben wir ein Formular, das schrittweise erweitert wird und für einige JavaScript-Interaktionen (in modernen Browsern) bereit ist, wenn der Benutzer mit dem Formular zu interagieren beginnt.
Innerhalb des Platzhalters ob
Aussage, die wir oben geschrieben haben, fangen wir an, unsere hinzuzufügen und zu entfernen js-
Unterricht im richtigen Moment. Zuerst wählen wir unsere Formularelemente aus und fügen einen Ereignis-Listener im hinzu verwischen
, Fokus
, und keyup
Ereignisse (wir verwenden keyup
eher, als Taste nach unten
oder Tastendruck
da diese Ereignisse vorzeitig feuern werden):
$ ('. form li'). find ('input, textarea'). on ('keyup blur focus', function (e) // Zwischenspeichern unserer Selektoren var $ this = $ (this), $ parent = $ this.) .parent (); // Klassen hinzufügen oder entfernen, wenn (e.type == 'keyup') // hier Schlüsselcode else if (e.type == 'blur') // hier Code verwischen else if (e.type == 'focus') // Fokuscode hier);
Hier ist eine kurze Erklärung, was wir hier machen:
$ ('. form li')
. Dann finden wir in dieser Auswahl alles
und
Felder .find ('Eingabe, Textbereich')
. Dadurch wird sichergestellt, dass die letzte Eingabe in unserem Markup (die Schaltfläche "Senden") nicht in unserer Auswahl enthalten ist.verwischen
, Fokus
, und keyup
Ereignisse und überprüfen Sie einfach den Ereignistyp mit e-Typ
um zu bestimmen, welche Klassen wir zu bestimmten Zeitpunkten hinzufügen oder entfernen werden.keyup
Nach den Interaktionsregeln, die wir zu Beginn aufgestellt haben und die dem Entwurf von Matt entsprechen, beginnt der Benutzer mit der Texteingabe (nicht Wenn sie sich auf das Feld konzentrieren, möchten wir das Etikett zeigen.
Also mit der keyup
Jedes Mal, wenn der Benutzer ein Zeichen eingibt, können wir überprüfen, ob das Eingabefeld leer ist (dieser Code geht hinein) if (e.type == 'keyup')
:
if ($ this.val () == ") $ parent.addClass ('js-hide-label'); else $ parent.removeClass ('js-hide-label');
Beachten Sie, dass unsere Logik so funktioniert:
Sie sollten jetzt etwas haben, das auf diese Weise funktioniert, wenn Sie Text in ein Eingabefeld eingeben oder löschen:
verwischen
Gemäß unseren Interaktionsregeln wissen wir (wieder), dass ein Benutzer den Fokus von einem Eingabefeld zum nächsten verschiebt (verwischen
Ereignis), sollten wir die Farbe des hervorheben Element abhängig davon, ob der Benutzer tatsächlich etwas in das Feld eingegeben hat.
In der else if (e.type == 'verwischen')
, Wir werden den folgenden Code hinzufügen:
if ($ this.val () == ") $ parent.addClass ('js-hide-label'); else $ parent.removeClass ('js-hide-label'). addClass ('js-unhighlight.) -Etikette');
Beachten Sie, dass unsere Logik so funktioniert:
js-hide-label
Klasse.js-hide-label
und heben Sie die Farbe der Beschriftung herab, indem Sie die Klasse 'js-unhighlight-label' hinzufügen.Sie sollten jetzt etwas haben, das die Farbe der Beschriftung herabsetzt, wenn Sie den Fokus entfernen, wie folgt:
Fokus
Als letztes müssen wir eine kleine Logik hinzufügen, wenn ein Benutzer sich auf eine Eingabe konzentriert. Befolgen Sie unsere Interaktionsregeln und verwenden Sie das folgende JavaScript im else if (e.type == 'Fokus')
Sektion:
if ($ this.val ()! == ") $ parent.removeClass ('js-unhighlight-label');
Unsere Logik funktioniert so:
Wenn ein Benutzer sich nun auf ein Formularfeld konzentriert, wird das Etikett mit der Markierungsfarbe hervorgehoben, wenn es nicht leer ist:
Wir können noch viel mehr mit diesem Formular machen, einschließlich der Validierung auf Client- und Serverseite. Wir könnten auch einige weitere Klassen erstellen, um gültige und ungültige Feldwerte zu gestalten. Zum Beispiel könnten wir Stile zu einer Klasse von 'js-error' hinzufügen, die auf die übergeordnete Klasse angewendet werden Element, wenn der Wert der Eingabe wie folgt ungültig ist:
.js-error border-color: # f13b3b! important; / * alle Fälle überschreiben * / .js-error + li border-top-color: # f13b3b; .js-error label color: # f13b3b;
Diese Arten von Validierungsstilen könnten dazu führen, dass unser Formular in etwa wie folgt aussieht:
Dieses Tutorial sollte jedoch zeigen, wie wir ein barrierefreies, progressiv verbessertes Formular erstellen können, das das Design von Matt nachahmt. Und ich muss sagen, ich denke, wir haben es gut gemacht.
Fühlen Sie sich frei, dieses Formular zu kopieren, zu modifizieren oder zu verbessern!