Saya ingin membuat carousel gambar, tempat pengguna dapat beralih di antara gambar, dengan mengklik panah. Sebagai contoh:
Namun, saya hanya dapat menggunakan HTML dan CSS — tanpa JavaScript (dan, karenanya, jQuery). Saya hanya perlu pengaturan dasar; transisi yang mulus dan sejenisnya tidak diperlukan.
Bagaimana saya bisa mencapai ini?
javascript
jquery
html
css
royhowie
sumber
sumber
:hover
; akhirnya terdiri potongan memanfaatkanclick
,css
; meskipun hanya menggunakan dua anak panah untuk kontrol bukanlah hal yang sepele, di sini. Jika "terlalu banyak kemungkinan solusi" akurat, Dapatkah membuat, memposting solusi alternatif untuk jawaban di bawah ini yang memenuhi persyaratan khusus "di mana pengguna dapat beralih di antara gambar, dengan mengklik panah" ?Jawaban:
Itu mudah! Cukup gunakan tombol radio dan label yang ditargetkan.
Tombol radio memiliki perilaku (perlu) yang hanya mengizinkan satu untuk dipilih pada satu waktu — seperti gambar di carousel kita.
Demo
Tampilkan cuplikan kode
TLDR: Catatan penting
input(type="radio")
adalahchecked
default, atau seluruh carousel akan disembunyikan.labels
benar menargetkan masukan radio sebelumnya / berikutnya (lihat bagian label di akhir tentang cara melakukan penargetan):checked
Penjelasan
Seperti inilah seharusnya struktur HTML dasar:
div#holder
akan menahan semua konten kami di tempatnya. Kemudian, kami akan mengelompokkan tombol radio, label, dan gambar kami semua di bawah adiv.group
. Ini memastikan input radio kami tidak mengalami gangguan destruktif (permainan kata).Kuncinya ada di pemilih (dan label — pastikan untuk membaca bagian itu)
Pertama, kami akan menyembunyikan tombol radio kami — lagipula mereka jelek:
Kami tidak perlu mengklik tombol radio. Sebaliknya, kita akan memberi gaya pada label kita dan menambahkan target (
for
properti), sehingga mereka mengarahkan klik ke blok input radio yang sesuai.Sebagian besar label kami harus disembunyikan:
(Saya akan menghilangkan semua gaya estetika, agar gaya lebih mudah dipahami. Anda dapat melihat versi yang lebih baik di cuplikan tumpukan.)
Kecuali untuk yang di samping input radio yang diaktifkan, atau
:checked
Selain itu,
div.content
masukan yang dicentang berikut juga harus ditampilkan:Namun, ketika tombol radio tidak dicentang,
div.content
harus disembunyikan:Bazinga! Sekarang carousel kita sebagian besar harus berfungsi
penuh, meskipun sedikit jelek. Mari pindahkan label kita ke posisi yang benar:Dan pusatkan gambar kita di dalam div masing-masing:
Langkah terakhir adalah bagaimana Anda menyiapkan label Anda:
Perhatikan caranya, jika diberikan input radio dengan
id
ofn
, thelabel.previous
will memilikifor
atribut dari(n - 1) % M
dan thelabel.next
will memilikifor
atribut(n + 1) % M
, dimanaM
adalah jumlah gambar dalam carousel.Tambahan
Jika Anda menggunakan Jade (atau mesin template lainnya), Anda dapat mengaturnya dengan for-loop sederhana seperti ini:
sumber
Catatan, di
css
bawah ini tidak memenuhi persyaratan khusus di PertanyaanMemanfaatkan kelas semu , thumbnail sebagai kontrol untuk beralih di antara gambar; dimodelkan pada pola yang dijelaskan di Cara Memicu Transisi CSS3 di Klik menggunakan: target
:target
sumber
Terinspirasi oleh royhowie saya berakhir dengan solusi yang jauh lebih sederhana jika menyangkut sintaks HTML. Juga, dengan animasi yang bagus dan dapat disesuaikan sepenuhnya!
Ide utamanya adalah membuat panah tidak dengan menempatkannya dalam HTML satu per satu, tetapi dengan membuat dan kemudian memposisikan pseudoelement dengan hati-hati.
JSFiddle
Anda dapat membaca lebih lanjut tentang penyesuaian dan beberapa batasan teknis di biola saya.
sumber
Silakan periksa tautan ini untuk carousel khusus CSS dengan opsi Putar Otomatis di awal, tombol navigasi Kiri Kanan, titik navigasi, dan lanjutkan pemutaran saat diklik tombol ...
Tautan Demo - http://blog.puneets.in/2016/02/pure-responsive-css3-slider-with.html
sumber
Memperluas solusi mengagumkan royhowie dengan menambahkan properti animasi di
img
:sumber
Mengapa tidak membuatnya mulus dan terlihat bagus hanya dengan CSS?
Ini adalah bagian dari perpustakaan yang saya buat, Picnic CSS . Namun, jsfiddle itu menyertakan pustaka dan semua plugin untuk versi berikutnya (4.0 sedang diselesaikan sekarang ). Anda dapat melihat versi 3.x saat ini dari plugin yang sama di sini, yang juga memenuhi semua persyaratan Anda, tetapi tidak semulus yang saya inginkan:
Saat ini Anda hanya dapat melihat kode sumber scss di cabang dev tetapi dijadwalkan akan dirilis pada hari-hari berikutnya, jadi saya akan memperbarui jawaban saya.
Tolong beberapa kode! Ini adalah HTML yang Anda butuhkan untuk versi 4.0, seperti yang dikomentari orang lain, pada dasarnya Anda bermain dengan
<input type='radio'>
dan<label>
untuk mencapai efek yang diinginkan:sumber