1. Web Design
  2. UX/UI

Gestalten eines eleganten Anmeldeformulars mit CSS3

Scroll to top

German (Deutsch) translation by Władysław Łucyszyn (you can also view the original English article)

Lassen Sie uns ein minimales und elegantes Anmeldeformular mit grundlegendem HTML5 erstellen und es dann mit einigen CSS3-Techniken verbessern. Zeit, einige einfache Elemente in etwas Schönes zu verwandeln.

Auf der Suche nach einer Verknüpfung?

Wenn Sie schöne CSS3-Formulare für Ihre Site wünschen und diese nicht selbst erstellen möchten, können Sie mit dem CSS3-Formularpack auf Envato Market nichts falsch machen. Für nur 5$ erhalten Sie:

  • 33 Login-Formularstile
  • 66 Suchformularstile
  • 12 Kontaktformular-Stile
  • ein allgemeines Formular mit Stilen für Textfeld, Textbereich, Optionsfeld, Kontrollkästchen, Auswahlfeld
  • verschiedene Farbstile für jede Form

Kein Wunder, dass es eines der meistverkauften CSS3-Formularelemente auf dem Envato Market ist.

CSS3 Form Pack on Envato MarketCSS3 Form Pack on Envato MarketCSS3 Form Pack on Envato Market
CSS3-Formularpack auf Envato Market

Einführung

Webformulare sind ein wesentlicher Bestandteil des Designs einer Website. Was auch immer der Zweck ist, Formulare sollen Benutzern eine einfache Möglichkeit bieten, Werte einzugeben und Daten zu übermitteln. Mit HTML5 und CSS3 können wir Formulare erstellen, die sowohl intuitiv zu bedienen als auch optisch ansprechend sind.


Das Design

Ich glaube, dass Webdesign sauber und effizient sein sollte. Das Formulardesign, das wir codieren werden, folgt diesen Prinzipien und umfasst nur drei Elemente: eine Benutzernameneingabe, eine Passworteingabe und eine Übermittlungseingabe. Da das Markup so einfach ist, bietet es mehr Flexibilität, wenn wir es in HTML und CSS codieren.

Hier sind einige Elemente im Design, die wir bei der Codierung beachten müssen:

  • Farbverläufe
  • Innere Schatten
  • Grenzen mit Opazität
  • Textschatten
  • Platzhaltertext

Die meisten Elemente sind CSS-Styling, aber wir werden uns auch das placeholder-Attribut ansehen, da es unseren Benutzern vorschlägt, welche Art von Daten sie eingeben sollten.


Schritt 1: Basis-HTML- und CSS-Struktur

Beginnen wir mit der Erstellung einer sauberen HTML5-Vorlage mit einem Formular und drei Eingaben:

1
<!DOCTYPE html>
2
<html lang="en">
3
4
<head>
5
	<meta charset="utf-8">
6
	<title>slick Login</title>
7
	<meta name="description" content="slick Login">
8
	<meta name="author" content="Webdesigntuts+">
9
</head>
10
11
<body>
12
	<form>
13
		<input type="text" name="username">
14
		<input type="password" name="password">
15
		<input type="submit" value="Log In">
16
	</form>
17
</body>
18
	
19
</html>

Im Moment haben wir nichts Besonderes, nur ein Formular, drei Eingaben und ein leeres Dokument. Lassen Sie uns eine CSS-Datei namens style.css erstellen und mit unserer HTML-Seite verknüpfen:

1
<link rel="stylesheet" type="text/css" href="style.css" />

Denken Sie daran, dass sich die CSS-Datei derzeit in unserem Hauptverzeichnis befindet; Stellen Sie sicher, dass Sie den richtigen Pfad verwenden, wenn Sie Ihre CSS-Datei in einem anderen Ordner ablegen, z. B. im Ordner "css".

Bevor wir der CSS-Datei unser eigenes Styling hinzufügen, ist es immer eine gute Übung, bei Null anzufangen. Wir beginnen unsere Stile mit Eric Meyers CSS Reset, das das Standard-Styling entfernt und es uns ermöglicht, unsere Regeln in jedem Browser vom gleichen Punkt aus zu erstellen.

Beginnen wir mit der Definition einer Schriftart und eines Hintergrundverlaufs für unsere Anmeldeseite. Fügen Sie diesen Code nach dem CSS-Reset ein:

1
body {
2
	font-family: sans-serif;
3
	
4
	background-color: #323B55;
5
	background-image: -webkit-linear-gradient(bottom, #323B55 0%, #424F71 100%);
6
	background-image: -moz-linear-gradient(bottom, #323B55 0%, #424F71 100%);
7
	background-image: -o-linear-gradient(bottom, #323B55 0%, #424F71 100%);
8
	background-image: -ms-linear-gradient(bottom, #323B55 0%, #424F71 100%);
9
	background-image: linear-gradient(bottom, #323B55 0%, #424F71 100%);
10
}

Nachdem wir diesen Code hinzugefügt haben, sollte unsere Seite jetzt einen coolen Hintergrund mit linearem Farbverlauf haben. Der Farbverlauf beginnt am unteren Rand der Seite (0%), wo die Farbe #323B55 ist, und endet am oberen Rand der Seite (100%), wo die Farbe #424F71 ist. Nur für den Fall, dass die Seite in einem Browser angezeigt wird, der keine Farbverläufe unterstützt, ist es wichtig, eine background-color anzugeben, die ich auf die gleiche Farbe wie den Farbverlauf bei 0% setze. Das Tolle an CSS3-Verläufen ist, dass Sie viele „Stopps“ hinzufügen können, zum Beispiel eine weitere Farbänderung bei 25%. Das letzte, was ich im body-Tag hinzufügen muss, ist die font-family, ich habe mich für die Sans Serif-Schrift entschieden.

Jetzt, da wir unsere Grundlage haben, ist es an der Zeit, etwas mehr Styling hinzuzufügen!


Schritt 2: Styling des Anmeldeformulars

Bevor wir mit dem CSS-Styling für das Anmeldeformular beginnen, müssen wir unserem HTML-Dokument einige Dinge hinzufügen. Beginnen Sie zunächst damit, dem Formular eine id hinzuzufügen, wir nennen es 'slick-login'. Fügen Sie als Nächstes in jedem der Eingabe-Tags ein placeholder-Attribut hinzu. So sollte die HTML-Seite bisher aussehen:

1
<!DOCTYPE html>
2
<html lang="en">
3
4
<head>
5
	<meta charset="utf-8">
6
	<title>slick Login</title>
7
	<meta name="description" content="slick Login">
8
	<meta name="author" content="Webdesigntuts+">
9
	<link rel="stylesheet" type="text/css" href="style.css" />
10
</head>
11
12
<body>
13
	<form id="slick-login">
14
		<input type="text" name="username" placeholder="me@tutsplus.com">
15
		<input type="password" name="password" placeholder="password">
16
		<input type="submit" value="Log In">
17
	</form>
18
</body>
19
20
</html>

Das HTML5-Eingabeplatzhalter-Attribut ist eine großartige Ergänzung zu Eingabe-Tags. Anstatt einen Eingabewert zu haben, den der Benutzer ersetzen muss, ermöglicht uns das placeholder-Attribut, Hilfetext anzuzeigen und ihn verschwinden zu lassen, sobald der Benutzer mit der Eingabe in das Feld beginnt. Es wird noch nicht allgemein unterstützt und sollte daher mit Vorsicht verwendet werden. Angenommen, das placeholder-Attribut funktioniert in einem Browser nicht, der Benutzer weiß nicht, welche Werte er eingeben muss. Später werden wir eine Fallback-Technik behandeln, aber es ist auch nichts wert, dass Platzhaltertext ein Vorschlag sein sollte, anstatt die Eingabe zu beschriften.

Nachdem wir nun unsere aktualisierte HTML-Seite haben, können wir damit beginnen, den Anmeldeformularen einige Stile hinzuzufügen. Hier ist das CSS für unsere Formular-id, die wir zuvor deklariert haben.

1
#slick-login {
2
	width: 220px;
3
	height: 155px;
4
	position: absolute;
5
	left: 50%;
6
	top: 50%;
7
	margin-left: -110px;
8
	margin-top: -75px;
9
}

Für dieses Login-Formular habe ich mich entschieden, es perfekt (horizontal und vertikal) in der Mitte der Seite auszurichten. Es ist ziemlich einfach, solche Elemente zu platzieren. Wie Sie aus dem obigen Code sehen können, positionieren Sie das Element 50% von oben und links und schieben Sie dann das Element mithilfe der Randwerte um die Hälfte der Breite und Höhe zurück. Dies ist eine großartige Methode, um Elemente in der Mitte der Seite auszurichten, aber in Bezug auf die Flexibilität ist sie nicht so groß. Wenn Sie beispielsweise Elemente duplizieren möchten, müssen Sie die Werte für Breite, Höhe und Rand ändern, damit das Element ausgerichtet bleibt. Obwohl ich das Formular in der Mitte der Seite ausgerichtet habe, können Sie den Code nach Belieben ändern!

Nachdem wir unser Formular ausgerichtet haben, ist es an der Zeit, die Eingaben zu gestalten!


Schritt 3: Styling der Eingänge

Jetzt kommen wir wirklich zu den lustigen Dingen. Beginnen wir mit dem Hinzufügen des CSS für die Text- und Passworteingaben:

1
#slick-login input[type="text"],#slick-login input[type="password"] {
2
	width: 100%;
3
	height: 40px;
4
	positon: relative;
5
	margin-top: 7px;
6
	font-size: 14px;
7
	color: #444;
8
	outline: none;
9
	border: 1px solid rgba(0, 0, 0, .49);
10
11
	padding-left: 20px;
12
	
13
	-webkit-background-clip: padding-box;
14
	-moz-background-clip: padding-box;
15
	background-clip: padding-box;
16
	border-radius: 6px;
17
18
	background-color: #fff;
19
	background-image: -webkit-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
20
	background-image: -moz-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
21
	background-image: -o-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
22
	background-image: -ms-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
23
	background-image: linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
24
25
	-webkit-box-shadow: inset 0px 2px 0px #d9d9d9;
26
	box-shadow: inset 0px 2px 0px #d9d9d9;
27
28
}
29
30
#slick-login input[type="text"]:focus,#slick-login input[type="password"]:focus {
31
	-webkit-box-shadow: inset 0px 2px 0px #a7a7a7;
32
	box-shadow: inset 0px 2px 0px #a7a7a7;
33
}
34
35
#slick-login input:first-child {
36
	margin-top: 0px;
37
}

Denken Sie daran, unser Ziel ist es, das Formular flexibel zu gestalten. Anstatt eine feste Eingabebreite zu deklarieren, habe ich mich entschieden, die Breite relativ zur Breite des Formulars zu machen. Auf diese Weise ändern sich alle Eingaben entsprechend, wenn wir uns entschieden haben, die Breite des Formulars zu ändern.

Da wir für alle Eingaben einen margin-top-Wert deklariert haben, müssen wir einen first-child-Selektor hinzufügen und sicherstellen, dass der margin-top der ersten Eingabe auf Null gesetzt ist. Auf diese Weise wird der erste Eingabewert immer oben im Formular positioniert.

Denken Sie auch daran, die Eigenschaft outline auf none zu setzen, damit der Browser unseren Eingaben keine unerwünschten Umrisse hinzufügt.

Transparente Grenzen

Um das Formular flexibler zu gestalten, fügen wir einen transparenten Rahmen hinzu, sodass sich das Formular unabhängig vom Hintergrund der Website daran ändert. Da das opacity-Attribut die Deckkraft des gesamten Elements ändert, habe ich mich entschieden, nach einer Methode zu suchen, um nur die Deckkraft des Rahmens zu ändern. Wenn Sie die Rahmenfarbe in rgba deklarieren, ist es möglich, einen Alpha-Wert hinzuzufügen. Wie Sie oben sehen können, ist unser Rahmen ein durchgehender schwarzer 1px-Rahmen, aber seine Deckkraft beträgt 47%.

Das Polsterproblem

In unserem Design wird der Text im Feld nach rechts verschoben. Um diesen Effekt in CSS zu erzielen, können wir einfach die Eigenschaft padding-left verwenden und sie auf 20px setzen. Beim Rendern des Codes tritt ein Problem auf. Der Padding-Wert fügt der Eingabebreite 20 Pixel hinzu, was nicht das ist, was wir möchten.

Um dies zu beheben, können wir eine background-clip-Eigenschaft hinzufügen und den Wert auf padding-box setzen. Dieser CSS-Schnipsel stellt sicher, dass das Padding die Breite der Eingabe nicht beeinflusst. Sie können mehr über die background-clip-Eigenschaft bei Mozilla erfahren.

Hinzufügen des inneren Schattens

Eine weitere sehr coole CSS3-Eigenschaft ist box-shadow. Die Verwendung des Einfügungsparameters ermöglicht es uns, einen inneren Schatten auf dem Eingabeelement zu erstellen. Mit der focus-Auswahl können wir die Werte und Farben einfach ändern, wenn der Benutzer auf das Feld klickt.


Schritt 4: Gestalten der Senden-Schaltfläche

Der Absenden-Button ist ein sehr wichtiger Teil eines Formulars, also heben wir ihn hervor! Hier ist das CSS, das wir für die Submit-Eingabe verwenden werden:

1
#slick-login input[type="submit"] {
2
	width: 100%;
3
	height: 50px;
4
	margin-top: 7px;
5
	color: #fff;
6
	font-size: 18px;
7
	font-weight: bold;
8
	text-shadow: 0px -1px 0px #5b6ddc;
9
	outline: none;
10
	border: 1px solid rgba(0, 0, 0, .49);
11
12
	-webkit-background-clip: padding-box;
13
	-moz-background-clip: padding-box;
14
	background-clip: padding-box;
15
	border-radius: 6px;
16
17
	background-color: #5466da;
18
	background-image: -webkit-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
19
	background-image: -moz-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
20
	background-image: -o-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
21
	background-image: -ms-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
22
	background-image: linear-gradient(bottom, #5466da 0%, #768ee4 100%);
23
24
	cursor: pointer;
25
	
26
	-webkit-box-shadow: inset 0px 1px 0px #9ab1ec;
27
	box-shadow: inset 0px 1px 0px #9ab1ec;
28
29
}
30
31
#slick-login input[type="submit"]:hover {
32
	background-color: #5f73e9;
33
	background-image: -webkit-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
34
	background-image: -moz-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
35
	background-image: -o-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
36
	background-image: -ms-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
37
	background-image: linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
38
39
	-webkit-box-shadow: inset 0px 1px 0px #aab9f4;
40
	box-shadow: inset 0px 1px 0px #aab9f4;
41
	
42
	margin-top: 10px;
43
}
44
45
#slick-login input[type="submit"]:active {
46
	background-color: #7588e1;
47
	background-image: -webkit-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
48
	background-image: -moz-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
49
	background-image: -o-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
50
	background-image: -ms-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
51
	background-image: linear-gradient(bottom, #7588e1 0%, #7184df 100%);
52
53
	-webkit-box-shadow: inset 0px 1px 0px #93a9e9;
54
	box-shadow: inset 0px 1px 0px #93a9e9;
55
}

Das CSS für unseren Senden-Button ist ziemlich einfach; Wir verwenden Ränder, Verläufe und innere Schatten, um die Schaltfläche hervorzuheben. Eine weitere CSS3-Eigenschaft, die wir uns ansehen werden, ist text-shadow.

Um den Schaltflächentext etwas stärker hervorzuheben, fügen wir einen 1px festen Schatten über dem Text hinzu. Mit einer dunkleren Farbe(#5b6ddc) können wir den weißen Text auf dem hellblauen Hintergrund hervorheben. Selbst der subtilste Effekt wie das Hinzufügen eines Textschattens kann Ihrem Design viel hinzufügen und Text hervorheben.

Ich ging voran und fügte den Code für die hover- und active Selektoren hinzu. Es wird lediglich die Farbe des Verlaufs und des inneren Schattens geändert. Beachten Sie, dass die Farbänderung eher subtil ist, aber sie trägt viel zum Design bei. Ich habe auch den Wert von margin-top im Hover-Zustand auf drei Pixel niedriger geändert. Die Veränderung fühlt sich natürlich an und trägt zur Eleganz der Form bei.

Bisher sieht alles super aus, aber wenn man mit der Maus darüber fährt und auf einige Elemente klickt, wirkt es etwas abgehackt. Zeit, etwas Animation hinzuzufügen!


Schritt 5: Hinzufügen von Übergängen zu Elementen

Damit die Dinge viel besser fließen, fügen wir unseren Eingaben diesen CSS-Code hinzu:

1
-webkit-transition: all .1s ease-in-out;
2
-moz-transition: all .1s ease-in-out;
3
-o-transition: all .1s ease-in-out;
4
-ms-transition: all .1s ease-in-out;
5
transition: all .1s ease-in-out;

Mit einem schnellen und einfachen Übergang sehen alle unsere Elemente viel besser aus und fühlen sich viel besser an. Beachten Sie den Übergang der inneren Schattenfarbe bei den Texteingaben und die Animation der Schaltfläche zum Senden beim Schweben. die Übergänge lassen das Formular vollständig aussehen.

Obwohl alles gut aussieht, fügen wir noch ein paar Leckereien hinzu, bevor wir Feierabend machen.


Schritt 6: Etiketten hinzufügen

Um sicherzustellen, dass unser Formular richtig zugänglich ist, fügen Sie dieses Markup neben Ihren input-Tags hinzu:

1
<label for="username">username</label>
2
<label for="password">password</label>

Da wir unser Formular so einfach wie möglich gestalten möchten, haben wir uns für das placeholder-Attribut entschieden. Eine andere Möglichkeit, die auch hätte funktionieren können, wäre das Hinzufügen eines label-Tags. Da wir das Tag in unserem Design nicht benötigen, sondern für Barrierefreiheit und SEO-Zwecke, fügen wir diesen CSS-Code hinzu in:

1
#slick-login label {
2
	display: none;
3
}

Wenn Sie die display-Eigenschaft auf none setzen, erhalten Sie das gewünschte Aussehen, das in diesem Fall überhaupt kein Aussehen ist!


Schritt 7: Cross-Browser-Kompatibilität

Kehren wir nun zu dem potenziellen Problem zurück, das wir mit dem placeholder-Attribut hätten. Angenommen, jemand betrachtet diese Website in einem Browser, der placeholder nicht unterstützt: Unsere leeren Eingaben wären ziemlich wenig hilfreich. Um dies zu beheben, verwenden wir jQuery und Modernizr, um Unterstützung zu erkennen und Situationen zu beheben, in denen keine vorhanden ist. Lassen Sie uns zunächst die Skripte mit unserer HTML-Seite verknüpfen.

Legen Sie die Skript-Tags im <head> Ihres HTML-Codes ab. Für eine optimale Leistung sollten Sie diese nach Ihren Stylesheet-Referenzen folgen lassen. Der Grund, warum wir empfehlen, Modernizr im Kopf zu platzieren, ist zweierlei: Der HTML5-Shiv (der HTML5-Elemente im IE aktiviert) muss vor dem <body> ausgeführt werden - Modernizr

1
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
2
<script src="http://www.modernizr.com/downloads/modernizr-latest.js"></script>

Erstellen Sie nun eine neue Javascript-Datei namens placeholder.js. Unique Method bietet eine großartige Möglichkeit, Modernizr zu verwenden, um einen Fallback für das placeholder-Attribut zu erstellen. Fügen Sie diesen Code in die Javascript-Datei ein:

1
$(function()
2
{
3
    // check placeholder browser support

4
    if (!Modernizr.input.placeholder)
5
    {
6
         // set placeholder values

7
        $(this).find('[placeholder]').each(function()
8
        {
9
            if ($(this).val() == '') // if field is empty

10
            {
11
                $(this).val( $(this).attr('placeholder') );
12
            }
13
        });
14
         // focus and blur of placeholders

15
        $('[placeholder]').focus(function()
16
        {
17
            if ($(this).val() == $(this).attr('placeholder'))
18
            {
19
                $(this).val('');
20
                $(this).removeClass('placeholder');
21
            }
22
        }).blur(function()
23
        {
24
            if ($(this).val() == '' || $(this).val() == $(this).attr('placeholder'))
25
            {
26
                $(this).val($(this).attr('placeholder'));
27
                $(this).addClass('placeholder');
28
            }
29
        });
30
         // remove placeholders on submit

31
        $('[placeholder]').closest('form').submit(function()
32
        {
33
            $(this).find('[placeholder]').each(function()
34
            {
35
                if ($(this).val() == $(this).attr('placeholder'))
36
                {
37
                    $(this).val('');
38
                }
39
            })
40
        });
41
     }
42
});

Wir werden auch die Javascript-Datei mit unserer HTML-Seite verknüpfen:

1
<script type="text/javascript" src="placeholder.js"></script>

Damit dies funktioniert, müssen wir den Feldeingaben eine placeholder-Klasse hinzufügen:

1
<input type="text" name="username" class="placeholder" placeholder="me@tutsplus.com">
2
<input type="password" name="password" class="placeholder" placeholder="password">

Fügen wir nun das Styling für die placeholder-Klasse in unserer CSS-Datei hinzu:

1
.placeholder {
2
    color: #444;
3
}

Wenn wir schon dabei sind, fügen wir auch einen hilfreichen CSS-Schnipsel hinzu, der dafür sorgt, dass die Breite der Eingaben unabhängig von Padding und Rahmen gleich bleibt:

1
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }

Für weitere Informationen, warum box-sizing so großartig ist, hat Paul Irish eine großartige Erklärung.


Schritt 8: Hinzufügen einer einfachen Animation

Um unser Formular noch schicker zu gestalten, fügen wir dem Formular beim Laden der Seite eine einfache aufsteigende Animation hinzu. Beginnen wir damit, die Animation zu deklarieren und Keyframes hinzuzufügen:

1
@keyframes "login" {
2
 0% {
3
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
4
   	filter: alpha(opacity=0);
5
   	opacity: 0;
6
   	margin-top: -50px;
7
 }
8
 100% {
9
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
10
   	filter: alpha(opacity=100);
11
   	opacity: 1;
12
   	margin-top: -75px;
13
 }
14
15
}
16
17
@-moz-keyframes login {
18
 0% {
19
   filter: alpha(opacity=0);
20
   opacity: 0;
21
   margin-top: -50px;
22
 }
23
 100% {
24
   filter: alpha(opacity=100);
25
   opacity: 1;
26
   margin-top: -75px;
27
 }
28
29
}
30
31
@-webkit-keyframes "login" {
32
 0% {
33
   filter: alpha(opacity=0);
34
   opacity: 0;
35
   margin-top: -50px;
36
 }
37
 100% {
38
   filter: alpha(opacity=100);
39
   opacity: 1;
40
   margin-top: -75px;
41
 }
42
43
}
44
45
@-ms-keyframes "login" {
46
 0% {
47
   -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
48
   filter: alpha(opacity=0);
49
   opacity: 0;
50
   margin-top: -50px;
51
 }
52
 100% {
53
   -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
54
   filter: alpha(opacity=100);
55
   opacity: 1;
56
   margin-top: -75px;
57
 }
58
59
}
60
61
@-o-keyframes "login" {
62
 0% {
63
   filter: alpha(opacity=0);
64
   opacity: 0;
65
   margin-top: -50px;
66
 }
67
 100% {
68
   filter: alpha(opacity=100);
69
   opacity: 1;
70
   margin-top: -75px;
71
 }
72
73
}

Das obige CSS deklariert eine neue Animation namens login und ändert die Werte für margin-top und opacity, sodass das Formular eingeblendet wird und in Position steigt. Fügen wir nun das CSS für die slick-login-ID hinzu:

1
	-webkit-animation: login 1s ease-in-out;
2
	-moz-animation: login 1s ease-in-out;
3
	-ms-animation: login 1s ease-in-out;
4
	-o-animation: login 1s ease-in-out;
5
	animation: login 1s ease-in-out;

Jetzt wird jedes Mal, wenn die Seite geladen wird, die 1-Sekunden-Animation ausgeführt. Jetzt, wo wir gestylt, repariert und animiert haben, sind wir fertig!


Endgültiges HTML und CSS

Hier ist ein Blick auf den endgültigen HTML-Code für dieses schicke Anmeldeformular:

1
<!DOCTYPE html>
2
<html lang="en">
3
4
<head>
5
	<meta charset="utf-8">
6
	<title>Slick Login</title>
7
	<meta name="description" content="slick Login">
8
	<meta name="author" content="Webdesigntuts+">
9
	<link rel="stylesheet" type="text/css" href="style.css" />
10
	<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
11
	<script src="http://www.modernizr.com/downloads/modernizr-latest.js"></script>
12
	<script type="text/javascript" src="placeholder.js"></script>
13
</head>
14
15
<body>
16
	<form id="slick-login">
17
		<label for="username">username</label><input type="text" name="username" class="placeholder" placeholder="me@tutsplus.com">
18
		<label for="password">password</label><input type="password" name="password" class="placeholder" placeholder="password">
19
		<input type="submit" value="Log In">
20
	</form>
21
</body>
22
23
</html>

Und das CSS:

1
/*

2
CSS RESET

3
http://meyerweb.com/eric/tools/css/reset/

4
v2.0 | 20110126

5
License:  none (public domain)

6
 */
7
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,canvas,details,embed,figure,figcaption,footer,header,hgroup,menu,nav,output,ruby,section,summary,time,mark,audio,video {
8
	margin: 0;
9
	padding: 0;
10
	border: 0;
11
	font-size: 100%;
12
	font: inherit;
13
	vertical-align: baseline;
14
}
15
16
/* HTML5 display-role reset for older browsers */
17
article,aside,details,figcaption,figure,footer,header,hgroup,menu,nav,section {
18
	display: block;
19
}
20
21
body {
22
	line-height: 1;
23
}
24
25
ol,ul {
26
	list-style: none;
27
}
28
29
blockquote,q {
30
	quotes: none;
31
}
32
33
blockquote:before,blockquote:after,q:before,q:after {
34
	content: '';
35
	content: none;
36
}
37
38
table {
39
	border-collapse: collapse;
40
	border-spacing: 0;
41
}
42
43
/* CSS Animations */
44
@keyframes "login" {
45
 0% {
46
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
47
   	filter: alpha(opacity=0);
48
   	opacity: 0;
49
   	margin-top: -50px;
50
 }
51
 100% {
52
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
53
   	filter: alpha(opacity=100);
54
   	opacity: 1;
55
   	margin-top: -75px;
56
 }
57
58
}
59
60
@-moz-keyframes login {
61
 0% {
62
   filter: alpha(opacity=0);
63
   opacity: 0;
64
   margin-top: -50px;
65
 }
66
 100% {
67
   filter: alpha(opacity=100);
68
   opacity: 1;
69
   margin-top: -75px;
70
 }
71
72
}
73
74
@-webkit-keyframes "login" {
75
 0% {
76
   filter: alpha(opacity=0);
77
   opacity: 0;
78
   margin-top: -50px;
79
 }
80
 100% {
81
   filter: alpha(opacity=100);
82
   opacity: 1;
83
   margin-top: -75px;
84
 }
85
86
}
87
88
@-ms-keyframes "login" {
89
 0% {
90
   -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
91
   filter: alpha(opacity=0);
92
   opacity: 0;
93
   margin-top: -50px;
94
 }
95
 100% {
96
   -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
97
   filter: alpha(opacity=100);
98
   opacity: 1;
99
   margin-top: -75px;
100
 }
101
102
}
103
104
@-o-keyframes "login" {
105
 0% {
106
   filter: alpha(opacity=0);
107
   opacity: 0;
108
   margin-top: -50px;
109
 }
110
 100% {
111
   filter: alpha(opacity=100);
112
   opacity: 1;
113
   margin-top: -75px;
114
 }
115
116
}
117
118
/* Main CSS */
119
* { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
120
121
body {
122
	font-family: sans-serif;
123
	
124
	background-color: #323B55;
125
	background-image: -webkit-linear-gradient(bottom, #323B55 0%, #424F71 100%);
126
	background-image: -moz-linear-gradient(bottom, #323B55 0%, #424F71 100%);
127
	background-image: -o-linear-gradient(bottom, #323B55 0%, #424F71 100%);
128
	background-image: -ms-linear-gradient(bottom, #323B55 0%, #424F71 100%);
129
	background-image: linear-gradient(bottom, #323B55 0%, #424F71 100%);
130
}
131
132
#slick-login {
133
	width: 220px;
134
	height: 155px;
135
	position: absolute;
136
	left: 50%;
137
	top: 50%;
138
	margin-left: -110px;
139
	margin-top: -75px;
140
141
	-webkit-animation: login 1s ease-in-out;
142
	-moz-animation: login 1s ease-in-out;
143
	-ms-animation: login 1s ease-in-out;
144
	-o-animation: login 1s ease-in-out;
145
	animation: login 1s ease-in-out;
146
}
147
148
#slick-login label {
149
	display: none;
150
}
151
152
.placeholder {
153
    color: #444;
154
}
155
156
#slick-login input[type="text"],#slick-login input[type="password"] {
157
	width: 100%;
158
	height: 40px;
159
	positon: relative;
160
	margin-top: 7px;
161
	font-size: 14px;
162
	color: #444;
163
	outline: none;
164
	border: 1px solid rgba(0, 0, 0, .49);
165
166
	padding-left: 20px;
167
	
168
	-webkit-background-clip: padding-box;
169
	-moz-background-clip: padding-box;
170
	background-clip: padding-box;
171
	border-radius: 6px;
172
173
	background-image: -webkit-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
174
	background-image: -moz-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
175
	background-image: -o-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
176
	background-image: -ms-linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
177
	background-image: linear-gradient(bottom, #FFFFFF 0%, #F2F2F2 100%);
178
179
	-webkit-box-shadow: inset 0px 2px 0px #d9d9d9;
180
	box-shadow: inset 0px 2px 0px #d9d9d9;
181
182
	-webkit-transition: all .1s ease-in-out;
183
	-moz-transition: all .1s ease-in-out;
184
	-o-transition: all .1s ease-in-out;
185
	-ms-transition: all .1s ease-in-out;
186
	transition: all .1s ease-in-out;
187
}
188
189
#slick-login input[type="text"]:focus,#slick-login input[type="password"]:focus {
190
	-webkit-box-shadow: inset 0px 2px 0px #a7a7a7;
191
	box-shadow: inset 0px 2px 0px #a7a7a7;
192
}
193
194
#slick-login input:first-child {
195
	margin-top: 0px;
196
}
197
198
#slick-login input[type="submit"] {
199
	width: 100%;
200
	height: 50px;
201
	margin-top: 7px;
202
	color: #fff;
203
	font-size: 18px;
204
	font-weight: bold;
205
	text-shadow: 0px -1px 0px #5b6ddc;
206
	outline: none;
207
	border: 1px solid rgba(0, 0, 0, .49);
208
209
	-webkit-background-clip: padding-box;
210
	-moz-background-clip: padding-box;
211
	background-clip: padding-box;
212
	border-radius: 6px;
213
214
	background-color: #5466da;
215
	background-image: -webkit-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
216
	background-image: -moz-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
217
	background-image: -o-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
218
	background-image: -ms-linear-gradient(bottom, #5466da 0%, #768ee4 100%);
219
	background-image: linear-gradient(bottom, #5466da 0%, #768ee4 100%);
220
	
221
	-webkit-box-shadow: inset 0px 1px 0px #9ab1ec;
222
	box-shadow: inset 0px 1px 0px #9ab1ec;
223
	
224
	cursor: pointer;
225
226
	-webkit-transition: all .1s ease-in-out;
227
	-moz-transition: all .1s ease-in-out;
228
	-o-transition: all .1s ease-in-out;
229
	-ms-transition: all .1s ease-in-out;
230
	transition: all .1s ease-in-out;
231
}
232
233
#slick-login input[type="submit"]:hover {
234
	background-color: #5f73e9;
235
	background-image: -webkit-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
236
	background-image: -moz-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
237
	background-image: -o-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
238
	background-image: -ms-linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
239
	background-image: linear-gradient(bottom, #5f73e9 0%, #859bef 100%);
240
241
	-webkit-box-shadow: inset 0px 1px 0px #aab9f4;
242
	box-shadow: inset 0px 1px 0px #aab9f4;
243
	margin-top: 10px;
244
}
245
246
#slick-login input[type="submit"]:active {
247
	background-color: #7588e1;
248
	background-image: -webkit-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
249
	background-image: -moz-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
250
	background-image: -o-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
251
	background-image: -ms-linear-gradient(bottom, #7588e1 0%, #7184df 100%);
252
	background-image: linear-gradient(bottom, #7588e1 0%, #7184df 100%);
253
254
	-webkit-box-shadow: inset 0px 1px 0px #93a9e9;
255
	box-shadow: inset 0px 1px 0px #93a9e9;
256
}

Abschluss

Hier ein kleiner Einblick in das Endergebnis:

Das Tolle an diesem Formular ist, dass es sehr einfach zu ändern ist. Es ist auch sehr einfach zu erweitern, weitere Eingaben, Validierung, Funktionalität usw. hinzuzufügen. Danke fürs Mitlesen und ich hoffe, Sie haben etwas gelernt. Mich würde interessieren, wofür Sie das verwenden!