Implementieren des Float-Label-Formularmusters

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.


Überblick

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:


Werfen Sie einen Blick auf den originalen Dribbble-Schuss auf floatlabel.com

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!


Form Anatomie

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.

Formularstruktur

Das Formular enthält die folgenden Elemente, in die wir übersetzen können HTML:

  • Elemente
  • Elemente

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.


Grundlegende Seitenvorlagen erstellen

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.



Formularlistenformate erstellen

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:



Formularelementstile erstellen

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:



Verwenden von JavaScript für ein progressiv verbessertes Formular

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);

Überprüfung auf Platzhalter Unterstützung

Falls 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!

    Ein Hinweis zu Übergängen

    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)..



    Entfernen der Markierungsfarbe

    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

    Ereignis-Listener hinzufügen

    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:

    • Wir wählen alle Listenelemente aus, die Teil unseres Formulars sind $ ('. form li'). Dann finden wir in dieser Auswahl alles und