Zum Inhalt springen
Der Guide für ein smartes Leben.
VG Wort Pixel
Ratgeber "Formulare in CSS"

Formulare gestalten mit Formalize

Webdesign könnte so schön sein, müsste man Formularen nicht ein attraktives Äußeres verpassen. Wir zeigen, wie Sie einfach Formulare mit Formulize stylen können.

Autor: Tim Kaufmann • 21.5.2012 • ca. 5:30 Min

Formulare gestalten mit Formalize
Formulare gestalten mit Formalize
© Internet Magazin

Hier erfahren Sie......wie Sie Formulare ansprechend gestalten ...wie Sie in viele Browser Ihren Code interpretieren...wie Sie Formalize zur Gestaltung einsetzen...

Hier erfahren Sie......wie Sie Formulare ansprechend gestalten ...wie Sie in viele Browser Ihren Code interpretieren...wie Sie Formalize zur Gestaltung einsetzen

Wer schon einmal ein Formular mit CSS gestyled hat, der weiß, wie kniflig das sein kann. In seinem äußerst lesenswerten Blogbeitrag "Formal Weirdness", zu Deutsch etwa "Förmliche Schrägheiten",   setzt sich CSS-Guru Eric Meyer ausführlich mit den Problemen auseinander, die entstehen, wenn  HTML-Formulare und CSS aufeinandertreffen. Das Kernproblem: Wo die  CSS-Spezifikation aufhört, beginnt der Wildwuchs. Gemäß CSS-Spezififikation sollen Browser alle Input-Elemente wie ersetzte Elemente behandeln. So wird zum Beispiel ein

<input type='checkbox'>

bei der Anzeige durch die Abbildung einer Checkbox ersetzt, vergleichbar mit dem Ersetzen von

<img src='some.jpg'>

durch die entsprechende Grafik. Weil CSS-seitig nicht spezifiziert ist, wie das Innere einer Checkbox auszusehen hat, sind Browser bei ihrer Darstellung völlig frei. Sie greifen auf im  Betriebssystem hinterlegte oder im Programm verankerte Symbole zurück. Klickt man die  Checkbox an, wird das eine Symbol durch ein anderes ausgetauscht. Das Problem dabei ist, dass  der Webdesigner keinen Einfluss auf das Innere eines ersetzten Elementes hat. Das ist vielleicht korrekt so, aber im Fall von Formularelementen alles andere als wünschenswert, wie folgendes  Beispiel zeigt:

input[type=text] {
vertical-align: baseline
}

Eigentlich müsste sich verticalalign:baseline so auswirken, dass die Unterkante des Eingabefeldes mit  der Unterkante des umgebenden Textes auf eine Höhe gebracht wird. In der Praxis wird man aber den im Eingabefeld enthaltenen Text mit dem umgebenden Text auf der selben Grundlinie  platzieren wollen - und so arbeiten auch die meisten Browser.

In den seltensten Fällen lässt sich die Spezifikation derart eindeutig umdeuten. Wie etwa soll ein  Browser Padding bei einer Checkbox umsetzen? Laut Spezifikation muss er es rund um das ersetzte Element platzieren, doch aus Sicht des Designers könnte auch der Abstand des  Häkchens zum Rand der Checkbox eine wünschenswerte Option sein. Auf welche Bestandteile  einer Checkbox sollen sich die Parameter height und width auswirken?

In seinem erwähnten Blogbeitrag führt Meyer zahlreiche weitere Beispiele für derlei  Ungenauigkeiten auf. Er zieht daraus zwei Schlüsse. Erstens bedarf es einer Erweiterung der  CSS-Spezifikation um zahlreiche Pseudoklassen und Eigenschaften, um Formularelemente  präzise designen zu können. Zweitens sollten CSS-Resets wie Meyers weit verbreiteter "Meyer  Reset" die Formularelemente unberührt lassen, um unerwünschte Nebenwirkungen zu vermeiden.

Formular-Styling mit Formalize

Es gibt eine ganze Reihe von CSS-Frameworks, mit denen Sie Formulare trotz aller  Schwierigkeiten recht zügig auf ein browserübergreifend wiedererkennbares Layout trimmen  können. Wohl das bekannteste ist Formalize von 960.gs-Entwickler Nathan Smith. Smith hat  damit ein Formulardesign geschaffen, das zu vielen gängigen Webdesigns passt, ohne langweilig oder übermäßig auffällig zu wirken. Alle Elemente wirken leicht eingelassen, alle Knöpfe haben  dasselbe Aussehen, inklusive dem Button-Tag. Soweit der Browser dies unterstützt, erhält das im  Fokus befindliche Formularelement einen leichten box-shadow. Über Javascript hilft Smith  Browsern auf die Sprünge, die das HTML5-Attribut placeholder noch nicht unterstützen. Sie  können die im HTML codierten Platzhalter bei aktiviertem Javascript dann trotzdem korrekt  anzeigen. Formalize enthält verschiedene Fassungen des Javascripts, die gängige Libraries wie jQuery, MooTools, Dojo, YUI und ExtJS berücksichtigen.

Formalize im Detail

image.jpg
Formalize sorgt für perfekt neben Checkboxen und Radios ausgerichtete Labels, hübsche Buttons und vieles mehr.
© Archiv

Smith weist ausdrücklich darauf hin, dass Formalize ein Framework ist, das projektspezifisch  angepasst werden will, anders als das zum Beispiel bei seinem Gridsystem 960.gs der Fall ist.

Nicht nur deshalb sei jedem, der Formulare mit CSS gestalten will, auch ein ausführlicher Blick in  den Formalize- Code empfohlen. Ein paar interessante Fundstücke: Die Zeilen 1 bis 27  enthalten Klassen wie .input_tiny und .input_xlarge, über die sich die Breite von Eingabefeldern steuern lässt. Die Breiten sind in Pixeln angegeben. Wenn Sie ein flexibles Webdesign umsetzen  möchten (Stichwort responsives Webdesign), sind Sie besser aufgehoben, wenn Sie die Inputs in <div>-Tags mit der Klasse .inputwrapper stecken. Das kombinieren Sie mit folgendem CSS:

.inputwrapper {
width: 70%; /* Beispiel */
}
input[type=text] {
width: 100%;
}

Webkit und Input-Type Search

In Zeile 34 verwendet Smith diesen Code, um Chrome, Safari und anderen webkitbasierten Browsern das besondere Styling von Eingabefeldern für Suchbegriffe abzugewöhnen:

input[type="search"]::-webkit-searchdecoration
{
display: none;
}

Wenn Ihnen die Wirkung dieses CSS noch nicht weit genug geht, sollten Sie mit dem  herstellerspezifischen -webkitappearance arbeiten:

input[type="search"] {
-webkit-appearance: textfield;
}

Knöpfe

Wir überspringen die folgenden Zeilen, in denen Formalize dem aktiven Formularelement einen  Box-Shadow verpasst. Weiter geht's ab Zeile 69 und mit dem Styling der Knöpfe. Gemeint sind  hier sowohl die Input-Typen reset, submit und button wie auch das <button>-Tag. Über die  Eigenschaft -webkit-appearance gewöhnt Formalize Webkit-Browsern eine Reihe von layouttechnischen Besonderheiten ab. Anschließend erhalten alle Buttons border-radius und ein  Hintergrundbild. In modernen Browsern wird dieses per linear-gradient gezeichnet, ansonsten als  Datei nachgeladen. Abgeschlossen wird die Regel durch zwei Padding-Eigenschaften, die wegen  des vorangestellte Asterisk nur in Internet Explorer 7 und darunter ihre Wirkung entfalten. Besser,  Sie verzichten auf diesen wenig empfehlenswerten Hack und dienen den alten Internet Explorern das entsprechende CSS über ein per Conditional Comment verlinktes Stylesheet an.  Oder Sie verwenden Paul Irishs Methode, bei der das <html>- oder <body>-Tag mittels  Conditional Comment IE-spezifische Klassen erhalten (bit.ly/7nHf9) - wenn Sie diese alten  Surfbretter denn überhaupt noch unterstützen wollen beziehungsweise müssen.

Texteingabe

Weiter geht's ab Zeile 146, ab der sich Formalize der Formatierung von Texteingabefeldern (das  heißt <textarea> und diverse <input>-Tags) sowie Selects widmet. Sicherlich die herausragende  Eigenschaft ist die Verwendung von

input[type=/diverse/] {
box-sizing: border-box;
}

Zu dessen Erklärung müssen wir etwas ausholen. Gemäß dem Standard-Boxmodell errechnet  sich die Breite eines Block-Elements aus dessen Breite zuzüglich Padding und Border (jeweils  links und rechts). Steckt man ein weiteres Block-Element in dieses Element hinein, erhält es automatisch eine Breite von 100 Prozent. Gibt man dem inneren Element nun etwas Padding,  wird letzteres nicht zur Gesamtbreite hinzuaddiert. Vielmehr geht die innere Breite, die dem  Content zur Verfügung steht, zurück. So weit, so gut.

Das Problem: <textarea> und <input type='text'> nehmen auch dann nicht die volle, zur  Verfügung stehende Breite ein, wenn sie per 'display: block' zu Block-Elementen erhoben  werden. Ihre Breite wird durch die HTML-Attribute cols beziehungsweise size bestimmt. Erst wenn Sie diesen Tags mit 'width: 100%' auf die Sprünge helfen, wachsen sie auf volle Breite -  und steuern direkt in das nächste Problem. Jetzt müssen Sie ein eventuelles Padding manuell von  den 100 Prozent abziehen, sonst wuchern die Eingabefelder aus dem sie umgebenden Elternelement heraus.

Gerade bei flexiblen Webdesigns sind entsprechende Berechnungen oft nicht mit der notwendigen  Präzision möglich - vom hohen Nervfaktor gar nicht erst zu reden. Deshalb ist es  leichter, wenn man das Box-Modell für Formularelemente ändert. Durch 'box-sizing: borderbox' wird Padding nicht mehr zur Breite von 100 Prozent addiert. Vielmehr sinkt durch Padding der  für den Inhalt zur Verfügung stehende Innenraum, so, als ob es das 'width: 100%' gar nicht gäbe.  So haben Sie sich über die volle Breite erstreckende Input- und Textarea-Elemente und  können diese ohne zusätzliche Verrenkungen mit Padding stylen.