• Home
  • CSS
  • Jak ustawić input jako obrazek?

Jak ustawić input jako obrazek?

 

How to replace input type=checkbox with an image – short instruction to checkbox image replacement

 

Czasami tworząc listę opcji do wyboru chciałoby się zrobić to niestandardowo, bardziej oryginalnie, w mniej nudny sposób. Po co zaznaczać opcje przedstawione jako tekst, skoro można dodać do nich obrazek i uczynić wybór przyjemniejszym. Jeśli nie bardzo rozumiesz o co mi chodzi, spójrz poniżej:

See the Pen Checkbox image replacement – how to replace input with image – css by Joanna (@JoannaEl) on CodePen.

 

Chodzi o to, by po kliknięciu w obrazek zaznaczał się input (w tym przypadku checkbox). Możemy wtedy odczytać, który input został zaznaczony i odpowiednio zareagować. Jak więc ustawić input jako obrazek?

HTML – Stwórzmy formularz z trzema obrazkami:

<form>
  <ul>
    <li><input id="flower" type="checkbox" name="icon" value="Kwiatek">
        <label for="flower">Kwiatek</label></li>
    <li><input id="owl" type="checkbox" name="icon" value="Sowa">
        <label for="owl">Sowa</label></li>
    <li><input id="sunflower" type="checkbox" name="icon" value="Słonecznik">
        <label for="sunflower">Słonecznik</label></li>
  </ul>
  <button id="button" type="submit">Potwierdź wybór</button> 
</form>

Utworzyłam trzy inputy w formie listy nienumerowanej, by łatwiej było manipulować ich ustawieniem. Listę wyświetlę w poziomie, by obrazki znajdowały się obok siebie (za pomocą display: inline-block). Każdemu inputowi, łącznie z etykietą do niego przyporządkowaną, nadam tło w formie obrazka i odpowiednio je ustawię. Każdy input, łącznie z etykietą, wyświetlę jako element blokowy, by w pełni widać było tło. Każdemu ustawię też przezroczystą ramkę po to, by nie „skakał”, kiedy pojawi się czarna ramka po kliknięciu w niego.

Kod CSS będzie zatem wyglądał tak:

ul li {
	list-style: none;
	display: inline-block;
	padding: 0px;
}

input {
	display: none;
	margin: 2px;
}

input[type=checkbox] + label[for=flower] {
	display: block;
	background: url(img/flower.png);
	background-repeat: no-repeat;
	background-position: bottom;
	width: 150px;
	height: 180px;
	border: 3px solid transparent;
	text-align: center;
	font-weight: bold;
}

input[type=checkbox] + label[for=owl] {
	display: block;
	background: url(img/owl.png);
	background-repeat: no-repeat;
	background-position: bottom;
	width: 150px;
	height: 180px;
	border: 3px solid transparent;
	text-align: center;
	font-weight: bold;
}

input[type=checkbox] + label[for=sunflower] {
	display: block;
	background: url(img/sunflower.png);
	background-repeat: no-repeat;
	background-position: bottom;
	width: 150px;
	height: 180px;
	border: 3px solid transparent;
	text-align: center;
	font-weight: bold;
}

input[type=checkbox]:checked + label {
	border: 3px solid black;
	border-radius: 20px;
}

Dla elementów listy wyłączyłam „kropki” ustawiając list-style: none, a widoczność samych inputów skorygowałam za pomocą dislay: none.

Efekt – jak na załączonym wyżej obrazku (kodzie) z codepen 🙂

Joanna

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *