Tvorba stylového a profesionálně vypadajícího formuláře typicky vyžaduje použití nějakých obrázků (a možná i JavaScriptu). Nicméně s CSS3 je nyní mnohem snazší vytvořit pěkné efekty, které nevyžadují použití obrázků a přitom vypadají čistě a elegantně.
V tomto tutoriálu budeme moci spatřit celou škálu různých novinek, které CSS3 přináší – vytvoříme si nějaké ty barevné přechody, přidáme stíny, zaoblené rohy a také pár jednoduchých animačních efektů.
Podívejme se, jak by měl vypadat výsledek našeho snažení:
Vytváření HTML struktury
Chcete-li již konečně začít, vytvořte si nový HTML dokument a přidejte do body následující kód:
<form action="#">
<fieldset id="user-details">
<label for="name">Name:</label>
<input type="text" name="name" value="" />
<label for="email">Email:</label>
<input type="email" name="email" value="" />
<label for="phone">Phone:</label>
<input type="text" name="phone" value="" />
<label for="website">Website:</label>
<input type="url" name="website" value="" />
</fieldset> <!--end user-details-->
<fieldset id="user-message">
<label for="message">Your Message:</label>
<textarea name="message" rows="0" cols="0"> </textarea>
<input type="submit" value="Submit Message" name="submit" class="submit" />
</fieldset> <!-- end user-message -->
</form>
Zatím je to vcelku jasné – vytváříme jednoduchý formulář, který obsahuje dva kontejnery: jeden, který zobrazuje vstupní pole pro detaily uživatele (#user-details), a druhý, který zobrazuje textové pole, kam uživatel může napsat svou zprávu (#user-message).
Nyní přidejte do hlavičky dokumentu následující kód:
<link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz' rel='stylesheet' type='text/css' />
Tato část zdrojáku vám dá k dispozici pěkný font z Google Fonts directory – ke kterému samozřejmě následně přidáme nějaké to základní stylování:
* { margin: 0px; padding: 0px; } body { margin: 0 auto; background: #f5f5f5; color: #555; width: 800px; /* odkaz na font Yanone Kaffeesatz */ font-family: 'Yanone Kaffeesatz', arial, sans-serif; } h1 { color: #555; margin: 0 0 20px 0; } label { font-size: 20px; color: #666; } fieldset { border: none; } #user-details { float: left; width: 230px; } #user-message { float: right; width: 405px; } textarea { width: 390px; height: 175px; }
Kouzlíme s CSS3
Nyní se pustíme do stylování samotného formuláře – do každé části přidáme standardní CSS kód a vysvětlíme si CSS3 kód, který to celé bude pohánět:
form {
float: left;
border: 1px solid #ddd;
padding: 30px 40px 20px 40px;
margin: 75px 0 0 0;
width: 715px;
background: #fff;
}
Pokud si doposud napsaný kód otevřete v prohlížeči, mělo by na vás vyskočit něco jako:
Teď si přidáme zaoblené rohy a stínované pozadí – to už se bez pomoci CSS3 neobejdeme. Přidejme proto následující kód na konec našeho elementu form:
form {
...
/* -- CSS3 - define rounded corners -- */
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
/* -- CSS3 - create a background gradient -- */
background: -webkit-gradient(linear, 0% 0%, 0% 40%, from(#EEE), to(#FFF));
background: -moz-linear-gradient(0% 40% 90deg,#FFF, #EEE);
/* -- CSS3 - add a drop shadow -- */
-webkit-box-shadow:0px 0 50px #ccc;
-moz-box-shadow:0px 0 50px #ccc;
box-shadow:0px 0 50px #ccc;
}
V kódu uvedeném výše je prefix „-moz“ použit k tomu, aby zaměřil prohlížeče s jádrem založeným na Gecku (Firefox a Flock), zatímco prefix „-webkit“ má na starosti prohlížeče jako Chrome či Safari.
Nyní by náš výtvor měl vypadat nějak takto:
Jak můžete sami vidět, s pár jednoduchými řádky CSS3 kódu jsme již nyní zlepšili vzhled našeho formuláře. Teď ještě přidáme kód pro elementy input a textarea:
input, textarea {
padding: 8px;
margin: 4px 0 20px 0;
background: #fff;
width: 220px;
font-size: 14px;
color: #555;
border: 1px #ddd solid;
}
Chceme jednoduše ke každému jednotlivému elementu input přidat stín a využít tzv. CSS3 transition effect tak, že nám pozadí ztmavne, kdykoliv na input/textarea najedeme. K tomu budeme potřebovat následující řádky:
input, textarea {
...
/* -- CSS3 Shadow - create a shadow around each input element -- */
-webkit-box-shadow: 0px 0px 4px #aaa;
-moz-box-shadow: 0px 0px 4px #aaa;
box-shadow: 0px 0px 4px #aaa;
/* -- CSS3 Transition - define what the transition will be applied to (i.e. the background) -- */
-webkit-transition: background 0.3s linear;
}
Přechodový efekt bude spuštěn, když uživatel přejede myší nad libovolným elementem input/textarea – potřebujeme ale ještě přidat kód k definování akce této události:
input:hover, textarea:hover {
background: #eee;
}
Pokud nyní najedete myší na daný element, měli byste vidět, jak se barva pozadí změní na šedou, a to s malým zpožděním (cca 0,3 sekundy). Máme téměř hotovo:
Poslední věc – zapracujeme na odesílacím tlačítku. Nejdříve klasický CSS kód:
input.submit {
width: 150px;
color: #eee;
text-transform: uppercase;
margin-top: 10px;
background-color: #18a5cc;
border: none;
}
A přidáme nám již známý přechodový efekt a nějaké ty zaoblené rohy:
input.submit {
...
/* -- CSS3 Transition - define which property to animate (i.e. the shadow) -- */
-webkit-transition: -webkit-box-shadow 0.3s linear;
/* -- CSS3 Shadow - create a shadow around each input element -- */
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#18a5cc), to(#0a85a8));
background: -moz-linear-gradient(25% 75% 90deg,#0a85a8, #18a5cc);
/* -- CSS3 - Rounded Corners -- */
-webkit-border-radius: 4px;
-moz-border-radius: 4px;
border-radius: 4px;
}
Animace se bude spouštět při události hover:
input.submit:hover {
-webkit-box-shadow: 0px 0px 20px #555;
-moz-box-shadow: 0px 0px 20px #aaa;
box-shadow: 0px 0px 20px #555;
cursor: pointer;
}
Takhle by měl vypadat kýžený výsledek:
Nyní máte pěkný kontaktní formulář napsaný čistě v CSS. Samozřejmě že se mohou vyskytnout ještě některé problémy, kvůli nimž kód nebude dokonale fungovat ve všech prohlížečích, ale celý postup byl navržen tak, že při testování vyhovoval i starším browserům.
K dizpozici je live demo formuláře a zdrojový kód. Live demo nejlépe funguje v prohlížečích poháněných WebKitem (tj. Chrome a Safari), ale vše by mělo „šlapat“ i ve Firefoxu, Opeře a IE.
Článek je překladem tutoriálu na blogu Voosh Themes.