Saya ingin memiliki alternatif untuk kotak centang standar - pada dasarnya saya ingin menggunakan gambar dan ketika pengguna mengklik gambar, fade out dan overlay kotak centang.
Intinya, saya ingin melakukan sesuatu seperti yang dilakukan Recaptcha 2 ketika Anda mengklik gambar yang memenuhi kriteria tertentu. Anda dapat melihat demo Recaptcha di sini, tetapi kadang-kadang mungkin membuat Anda menyelesaikan pertanyaan teks, sebagai lawan dari pemilihan gambar. Jadi, inilah tangkapan layar:
Ketika Anda mengklik salah satu gambar (dalam hal ini, berisi gambar steak), gambar yang Anda klik menyusut dalam ukuran dan centang biru muncul, menunjukkan bahwa Anda telah mencentangnya.
Katakanlah saya ingin mereproduksi contoh persis ini.
Saya menyadari bahwa saya dapat memiliki 9 kotak centang tersembunyi, dan melampirkan beberapa jQuery sehingga ketika saya mengklik gambar, itu memilih / membatalkan pilihan kotak centang tersembunyi. Tapi bagaimana dengan penyusutan gambar / overlay kutu?
sumber
:before
keajaiban untuk gambar centang?Jawaban:
Solusi HTML / CSS semantik murni
Ini mudah diimplementasikan sendiri, tidak perlu solusi pra-dibuat. Juga akan banyak mengajari Anda karena Anda tampaknya tidak terlalu mudah dengan CSS.
Ini adalah hal yang perlu kamu lakukan:
Kotak centang Anda harus memiliki
id
atribut yang berbeda . Ini memungkinkan Anda untuk menghubungkannya<label>
, menggunakan labelfor
-atribut.Contoh:
Melampirkan label ke kotak centang akan memicu perilaku browser: Setiap kali seseorang mengklik label (atau gambar di dalamnya), kotak centang akan diaktifkan.
Selanjutnya, Anda menyembunyikan kotak centang dengan menerapkan misalnya
display: none;
untuk itu.Sekarang yang perlu dilakukan hanyalah mengatur gaya yang Anda inginkan untuk
label::before
elemen semu Anda (yang akan digunakan sebagai elemen penggantian kotak centang visual):Pada langkah rumit terakhir, Anda menggunakan
:checked
pemilih palsu CSS untuk mengubah gambar ketika kotak centang dicentang:The
+
( berdekatan saudara pemilih ) memastikan Anda hanya mengubah label yang langsung mengikuti centang tersembunyi di markup.Anda dapat mengoptimalkannya dengan meletakkan kedua gambar dalam spritemap dan hanya menerapkan perubahan
background-position
alih-alih menukar gambar.Tentu saja Anda perlu memposisikan label dengan benar dan menerapkan
display: block;
serta mengatur yang benarwidth
danheight
.Edit:
Contoh kode dan cuplikan, yang saya buat setelah instruksi ini, menggunakan teknik yang sama, tetapi alih-alih menggunakan gambar untuk kotak centang, penggantian kotak centang dilakukan murni dengan CSS , membuat
::before
label yang telah, setelah diperiksa, memilikicontent: "✓";
. Tambahkan beberapa batas bulat dan transisi manis dan hasilnya benar-benar disukai!Berikut adalah codepen yang berfungsi yang menampilkan teknik dan tidak memerlukan gambar untuk kotak centang:
Berikut ini kode yang sama dalam cuplikan:
sumber
:hover
:)Solusi CSS murni
Ada tiga perangkat rapi yang dipanggil:
:checked
pemilih::before
pseudo-selectorcontent
Properti css .sumber
<input type="radio" name="myRadio" id="myRadio1" />
juga mengubah css Anda untuk menyembunyikan peluru:input[type=radio]{display: none;}
Melihat plugin jQuery ini: imgCheckbox (pada NPM dan bower )
Penafian: Tidak diperlukan javascript untuk menyelesaikan masalah ini. Ketegangan adalah antara rawatan dan efisiensi kode. Meskipun tidak perlu untuk plugin (atau javascript), itu tentu membuatnya lebih cepat untuk membangun dan sering lebih mudah untuk berubah.
Solusi Barebones:
Dengan HTML yang sangat sederhana (tidak ada kekacauan dengan kotak centang dan label dll.):
Anda dapat menggunakan jQuery toggleClass untuk mengaktifkan / menonaktifkan
selected
atauchecked
kelas padaclick
acara:Barang yang diperiksa diambil dengan
Ditambah kesejukan:
Anda dapat mendesain gambar berdasarkan ini tetapi masalah besar adalah bahwa tanpa elemen DOM lainnya Anda bahkan tidak dapat menggunakan
::before
dan::after
menambahkan hal-hal seperti tanda centang. Solusinya adalah membungkus gambar Anda dengan elemen lain (dan masuk akal juga untuk melampirkan pendengar klik ke elemen yang dibungkus).Ini membuat html Anda benar-benar bersih dan js Anda sangat mudah dibaca. Lihatlah cuplikan ...
Tampilkan cuplikan kode
Menggunakan Plugin jQuery imgCheckbox :
Terinspirasi oleh solusi di atas, saya telah membangun sebuah plugin yang dapat digunakan semudah:
Lihat dalam aksi (dan lihat sumbernya )
sumber
Saya akan menambahkan div tambahan dengan
position: relative;
danclass="checked"
yang memiliki lebar / tinggi yang sama dengan gambar memiliki dan dari posisi dalamleft: 0; top: 0;
mengandung ikon. Dimulai dengandisplay: none;
.Sekarang Anda dapat mendengarkan
click
acara-:Dengan cara ini Anda bisa mendapatkan ikon dan juga mengubah ukuran gambar ke cara yang lebih kecil.
Perhatikan: Hanya ingin menunjukkan "logika" di balik pikiran saya, contoh ini mungkin tidak berfungsi atau memiliki beberapa bug di dalamnya.
sumber
Saya perhatikan jawaban lain yang tidak digunakan
<label>
(mengapa tidak?), Atau memerlukan kecocokanfor
danid
atribut. Ini berarti jika Anda memiliki ID bentrok, kode Anda tidak akan berfungsi, dan Anda harus ingat untuk membuat ID unik setiap kali.Juga, jika Anda menyembunyikan
input
dengandisplay:none
atauvisibility:hidden
, browser tidak akan fokus padanya.Kotak centang dan teksnya (atau dalam hal ini, gambar) dapat dibungkus dengan label:
sumber
Di sini contoh cepat memilih gambar seperti kotak centang
Contoh yang Diperbarui menggunakan Knockout.js:
sumber
Untuk memperluas jawaban yang diterima bagi siapa saja yang menggunakan WordPress & GravityForms untuk menghasilkan formulir mereka dan ingin secara otomatis mengisi bidang kotak centang dengan daftar posting dan Thumbnail Unggulan mereka yang terkait
Dan CSS:
sumber