Technologia się rozwija nieustannie. Aplikacje internetowe są ulepszane nieustannie. Czasy statycznych stron zniknęły bezpowrotnie. Wykorzystanie Javascriptu, nowinek HTML5 CSS3 to standard. Jak przeżyć w tym świecie? Pytanie z nutką ironii, bowiem teraz aplikacje przykuwają bardzo wzrok obserwatora i o tym dzisiaj parę słów.

Tworząc własną witrynę możemy wybrać jedną z 3 dróg: wykorzystać CMS, zamówić projekt graficzny lub samemu pomęczyć się w budowaniu od podstaw. O ile pierwsza droga (w przypadku darmowych CMSów) nie zamęczy naszego budżetu, o tyle druga już z dużym prawdopodobieństwem będzie to niosła za sobą. Ostatnia opcja dotyczy twórców z powołania, obeznanych w temacie i stawiających sobie wyzwania … których nie goni czas 🙂 W tym artykule trochę o nich, a więc może i o Tobie?!

Standardowe kontrolki formularzy są nudne. Nie da się ukryć. Oklepana grafika, więc oka nie zachwyca. Jednak możemy to zmienić! 

Projekt graficzny pól formularza

Teraz będziemy tworzyli własne checkboxyradiobuttony. Zatem do dzieła.

Czego potrzebujemy?

  • dwie grafiki np. 56px x 56px
  • arkusza stylów
  • kodu html

Grafika

Jedna grafika ma odpowiadać za checkboxy (np. checkbox.png), a druga za radiobuttony (np. radio.png). Analogicznie każda z grafik składa się z 4 części 28px x 28px:

  • w lewym górnym rogu grafika niezaznaczonego i niepodświetlonego (kursor poza polem) pola,
  • w prawym górnym rogu grafika zaznaczonego i niepodświetlonego pola,
  • w lewym dolnym rogu grafika niezaznaczonego i podświetlonego (kursor na polu) pola,
  • w prawym dolnym rogu grafika zaznaczonego i podświetlonego pola.

Arkusz CSS

Kod stylów dla checkboxa:

input[type='checkbox'] {
	display: none;
}			

input[type='checkbox']+label {
	width: 28px;
	height: 28px;
	background: url('../images/checkbox.png') no-repeat;
	padding: 0;
	border: 0;
	display: inline-block;
	vertical-align: bottom;
}

input[type='checkbox']+label:hover {
	background-position: left bottom;
}

input[type='checkbox']:checked+label {
	background-position: right top;
}				

input[type='checkbox']:checked+label:hover {
	background-position: right bottom;
}

input[type='checkbox']+label+label {
	line-height: 28px;
}

Krótko opiszę kod. Natywne pole zostaje ukryte. To wymaga dołączenia „pola”, które będzie ja zastępowało i do tego pozwoli na manipulację wyglądem. Idealnie nadaje się do tego label z uwagi na łatwe powiązanie z polem (ukrytym!) poprzez atrybut for. Ustawiamy obrazek tła dla labela, wysokość, szerokość itd. Zmieniamy background-position w zależności od tego czy pole (ukryte!) jest zaznaczone i podświetlone. Kolejny label już, jak intuicja podpowiada, będzie wyświetlał nam odpowiedni tekst.

chbxs

Kod stylów dla radiobuttona:

input[type='radio'] {
	display: none;
}			

input[type='radio']+label {
	width: 28px;
	height: 28px;
	background: url('../images/radio.png') no-repeat;
	padding: 0;
	border: 0;
	display: inline-block;
	vertical-align: bottom;
}

input[type='radio']+label:hover {
	background-position: left bottom;
}

input[type='radio']:checked+label {
	background-position: right top;
}				

input[type='radio']:checked+label:hover {
	background-position: right bottom !important;
}				

input[type='radio']+label+label {
	line-height: 28px;
}

rdbts

Kod HTML

Od razu dla obu … domyślicie się, który który 🙂

<div class="radio">
    <input id="radio1" value="1-5" checked="checked" type="radio" name="radio1">
    <label for="radio1"></label>
    <label for="radio1">1-5</label>
</div>

<div class="checkbox">
    <input id="checkbox1" value="Komentarze - umożliwienie komentowania wybranych treści na stronie" type="checkbox" name="checkbox1">
    <label for="checkbox1"></label>
    <label for="checkbox1">Komentarze - umożliwienie komentowania wybranych treści na stronie</label>
</div>

 

Podsumowanie

Przez tych kilka małych zmian możemy sprawić, że nasz formularz ożyje. Powyższy mechanizm pozwala bez użycia Javascriptu stworzyć nowy wygląd formularza, gdzie interakcja następuje po kliknięciu dowolnego elementu pola – akcja na dowolnym labelu będzie połączona z odpowiednim w stosunku do niego inpucie. Szybko łatwo i przyjemnie.