Boilerform: Eine Nachlese

Avatar of Andy Bell
Andy Bell am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Als Chris seine Idee für ein Boilerform schrieb, dachte ich bereits darüber nach, ein neues Projekt zu starten. Ich hatte gerade beschlossen, mein Frontend-Boilerplate einzustellen und wollte etwas Neues zum Nachdenken. Chris' Idee traf mich sofort, also beteiligte ich mich enthusiastisch an den Kommentaren wie ein aufgeregter Welpe. Diese Begeisterung führte dazu, dass ich die erste Version von Boilerform baute, die du dir hier ansehen kannst.

Der Grund für meine anfängliche Begeisterung war, dass ich ein heimliches Vergnügen für Formulare habe. In verschiedenen Jobs habe ich auf einem ziemlich intensiven Niveau mit Formularen gearbeitet und viel darüber gelernt. Dies reichte vom Bau dynamischer Formulargeneratoren bis hin zum hochrangigen Spam-Schutz für eine Harley-Davidson®-Website-Plattform. Jedes verschiedene Projekt hat mir Einblicke in das Frontend und Backend des Prozesses gegeben. Jedes dieser Projekte hat auch meine Toleranz für schnelle, faule Implementierungen von Formularen aufgebraucht, da ich die drastischen Auswirkungen davon im großen Maßstab gesehen habe.

Aber hey, wir sind keine schlechten Menschen. Formulare sind ein *Albtraum* zu bearbeiten. Obwohl es jetzt besser ist: Jeder Browser behandelt sie etwas anders. Schauen Sie sich zum Beispiel diese Auswahllisten aus einer Auswahl von Browsern und Betriebssystemen an. Keiner von ihnen sieht gleich aus.

Dies ist nur die Spitze des Eisbergs der Inkonsistenz.

Aufgrund dieser Inkonsistenzen ist es leicht zu verstehen, warum Entwickler es vermeiden, zu tief zu graben oder einfach eine Kopie von Bootstrap hochfahren und damit fertig sein. Außerdem werden meiner Erfahrung nach die Designs kleinerer Formulare, wie z. B. eines Kontaktformulars, bis später im Projekt aufgeschoben, wenn die meiste positive Dynamik bereits verflogen ist. Ich war sogar schuldig, Kontaktformulare einen Tag vor dem Start einer Website zu erstellen. 😬

Es gibt eindeutig eine Gelegenheit, den Prozess der Arbeit mit Formularen – zumindest im Frontend – zu verbessern, und ich konnte der Versuchung, es zu tun, nicht widerstehen!

Die Planung

Ich saß und dachte darüber nach, welche Schmerzpunkte bei der Arbeit mit Formularen bestehen und was mich als Nutzer von Formularen ärgert. Ich entschied, dass ich als Entwickler es hasse, Formulare zu stylen. Als Nutzer ärgern mich schlecht implementierte *Formularfelder*.

Ein Beispiel für Letzteres sind E-Mail-Felder. Wenn Sie versuchen, ein E-Mail-Feld auf einem iOS-Gerät auszufüllen, erhalten Sie diese ärgerliche Eigenschaft, dass der erste Buchstabe vom Browser großgeschrieben wird, weil er ihn wie einen Satz behandelt. Alles, was Sie tun müssen, um dieses Verhalten zu stoppen, ist, autocapitalize="none" zu Ihrem Feld hinzuzufügen, und das stoppt. Ich weiß, dass dies nicht allgemein bekannt ist, da ich es selten sehe, aber es ist ein so schneller Gewinn, um eine positive Auswirkung auf Ihre Benutzer zu haben.

Ich wollte diese kleinen Tricks direkt in Boilerform einbauen, um Entwicklern zu helfen, das Leben ihrer Benutzer einfacher zu machen. Die Erstellung eines Frontend-Boilerplates oder -Frameworks bedeutet so viel mehr als nur Styling und Ästhetik. Es geht darum, Ihre gesammelten Erfahrungen mit anderen zu teilen, um die Landschaft insgesamt besser zu machen.

Die Spezifikation

Ich musste darüber nachdenken, was Boilerform als Minimum Viable Product bei der ersten Veröffentlichung können sollte. Ich kam zu folgenden Regeln:

  • Es musste mit den meisten Frontends kompatibel sein
  • Es musste gut dokumentiert sein
  • Es musste leichtgewichtig sein
  • Jemand sollte einen CDN-Link zu seinem <head> einfügen können und es sollte einfach funktionieren
  • Jemand sollte auch die Quelle für seine eigenen Projekte erweitern können
  • Es sollte nicht zu meinungsbildend sein

Um diese Punkte zu erreichen, musste ich einige technologische Entscheidungen treffen. Ich entschied mich für ein Setup mit geringer Einstiegshürde. Dies war:

  • Sass-basiertes CSS
  • BEM
  • Plain ol' HTML
  • Ein einfaches Kompilierungs-Setup

Ich konzentrierte mich auch auf Beispiele. CodePen war dafür die natürliche Wahl, da sie sich sehr gut einbetten lassen. Benutzer können sie auch forken und selbst damit experimentieren.

Die letzte Entscheidung war, eine Pattern Library herauszubringen, um Komponenten in kleine Teile zu zerlegen. Das half mir auf verschiedene Weise. Es half hauptsächlich bei der Organisation – aber es half mir auch, Boilerform in einer kleinteiligen, sporadischen Weise zu bauen, da ich abends daran arbeitete.

Ich hatte meinen Plan und meinen Stack, also machte ich mich an die Arbeit.

Einfach halten

Es ist leicht, dass ein Projekt wie dieses aus dem Ruder läuft, daher ist es nützlich, einige Punkte darüber festzulegen, was Boilerform sein wird und was nicht.

Was Boilerform sein wird

  • Es wird immer ein Boilerplate sein, um Ihnen einen guten Start in Ihr Projekt zu ermöglichen
  • Es wird High-Level-Hilfe bei HTML, CSS und JavaScript bieten, um das Leben von Entwicklern und Benutzern zu erleichtern
  • Es wird darauf abzielen, superleichtgewichtig zu sein, damit es keine schwere Last wird
  • Es wird konfigurierbare Optionen anbieten, die es flexibel und einfach machen, es in die meisten Webprojekte zu integrieren

Was Boilerform nicht sein wird

  • Es wird keine Wunderwaffe für Ihre Formulare sein – es wird immer noch etwas Arbeit erfordern
  • Es wird kein Framework wie Bootstrap oder Foundation sein, da es immer ein Ausgangspunkt sein wird
  • Es wird mit seinem CSS und JavaScript nicht übermäßig meinungsbildend sein
  • Es wird niemals auf ein bestimmtes Framework oder eine bestimmte Webtechnologie abzielen

Die Details

Ich weiß, dass ihr alle gerne in die Details eintaucht, wie Dinge funktionieren, also lasst mich euch eine Schnelltour geben!

CSS-Namespacing

Das Erste, was ich erledigt habe, war das Namespacing. Ich habe an einer Vielzahl von verschiedenen Websites und Setups gearbeitet, und sie alle haben etwas gemeinsam, wenn es um CSS geht: Konflikte. Mit diesem Gedanken im Hinterkopf habe ich einen @mixin geschrieben, der das gesamte CSS in einen .boilerform-Namespace einschloss.

// Source Sass
.c-button {
  @include namespace() {
    background: gray;
  }
}

// This compiles to this with Sass: 
.boilerform .c-button { background: gray; }

Das Mixin ist im Moment einfach, aber es gibt uns Flexibilität zu skalieren. Wenn wir das Namespacing später optional machen wollten, müssen wir nur dieses Mixin aktualisieren. Ich liebe diese Art von Modularität.

Im Moment gibt es uns Sicherheit. Nichts dringt aus Boilerform heraus und hoffentlich wird alles, was hineinleckt, von den Namespaced-Resets und Regeln behandelt.

BEM mit einem Hauch von Präfixen

Ich liebe BEM. Es ist seit ein paar Jahren Kernstück meines CSS und Markup. Eine Sache, die ich an BEM liebe, ist, dass es Ihnen hilft, kleine, gekapselte Komponenten zu bauen. Das ist perfekt für ein Projekt wie Boilerform.

Ich könnte wahrscheinlich nackte Elemente sicher ansprechen, dank des Namespacings, aber BEM ist mehr als nur das Anbringen von Klassen an alles. Es gibt mir und anderen die Freiheit, jede beliebige Markup-Struktur zu schreiben. Es ist auch für jemanden wirklich einfach, den Code aufzunehmen und zu verstehen, was zu was gehört, sowohl in HTML als auch in CSS.

Eine weitere Sache, die ich diesem Setup hinzugefügt habe, war ein Komponentenpräfix. Anstelle einer .input-field-Komponente haben wir eine .c-input-field-Komponente. Ich hoffe, solche kleinen Dinge helfen einem neuen Mitwirkenden, sofort zu erkennen, was eine Komponente ist.

Horror-Eingaben erhalten ein cooles Styling

Wie oben erwähnt, sind Auswahllisten furchtbar zu stylen. Dasselbe gilt für Radiobuttons und Checkboxen.

Ein Trick, den ich seit einiger Zeit anwende, ist die Abstraktion des Stylings auf andere, freundlichere HTML-Elemente. Zum Beispiel wickle ich bei <select>-Elementen diese in eine .c-select-field-Komponente ein und verwende Geschwisterelemente, um ein konsistentes Pfeilsymbol hinzuzufügen.

Bei Checkboxen und Radiobuttons blende ich den Hauptinput visuell aus und verwende benachbarte <label>-Elemente, um Zustandsänderungen anzuzeigen. Die Verwendung dieses Ansatzes macht die Arbeit mit diesen Steuerelementen so viel einfacher. Wichtig ist, dass wir Barrierefreiheit und native Ereignisse beibehalten.

Basisattribute zur einfacheren Verwendung von Feldern

Ich habe es oben mit meinem Beispiel zur E-Mail-Kapitalisierung erwähnt, aber das war nicht die einzige Ergänzung nützlicher Attribute.

  • Suchfelder haben autocorrect="off", um zu verhindern, dass Browser Rechtschreibfehler korrigieren. Ich empfehle dringend, dies auch bei Eingaben hinzuzufügen, in die ein Benutzer seinen Namen eingibt.
  • Zahlenfelder haben min, max und step Attribute, die bei der Validierung helfen. Das ist auch großartig für Tastaturnutzer.
  • Alle Felder haben leere name- und id-Attribute, um hoffentlich den Verdrahtungsprozess zu beschleunigen

Ich bin sicherlich daran interessiert, dass dies weiter ausgebaut wird, denn kleine Anpassungen wie diese sind großartig für die Benutzererfahrung.

Weiter so. Kannst du helfen?

Boilerform ist derzeit an einem guten Punkt, hat aber echtes Potenzial, nützlich zu sein. Einige Ideen, die ich für die Weiterentwicklung hatte, sind:

  • Einführung mehrerer JavaScript-Bibliotheksintegrationen, wie z. B. React, Vue und Angular
  • Erstellung einiger grundlegender Formularlayouts in der Pattern Library
  • Erstellung von Sass-Mixins zum Stylen lästiger Dinge wie Platzhalter
  • Verbesserung der Konfigurierbarkeit
  • Hinzufügen neuer Elemente wie des Range-Inputs
  • Erstellung mehrsprachiger Dokumentation

Wie Sie sehen können, ist das eine Menge Arbeit, daher wäre es großartig, wenn wir ein paar Mitwirkende für das Projekt gewinnen könnten, um etwas wirklich Nützliches für unsere Community zu schaffen. Die Einbeziehung von Mitwirkenden mit unterschiedlichen Fachkenntnissen und Hintergründen wird uns helfen, es für so viele Menschen wie möglich nützlich zu machen, von Endbenutzern bis hin zu Backend-Entwicklern.

Lasst uns gemeinsam etwas Großartiges schaffen. 🙂

Schauen Sie sich die Projektseite oder das GitHub-Repository an.