Kartu Kuis Interaktif
Bangun sendiri dari brief di bawah. Semua pemeriksaan lolos berarti proyekmu selesai, salah satu syarat sertifikat HTML CSS JavaScript.
Brief
Bangun Kartu Kuis Interaktif: satu kartu kuis pilihan ganda yang memakai ketiga bahasa sekaligus. HTML menyediakan kerangka dan penanda (id, class, data-*), CSS menyiapkan semua tampilan termasuk warna jawaban dan tema gelap, dan JavaScript hanya mengisi soal, memasang class, dan mengatur atribut.
Kode awal sudah berisi HTML lengkap, sebagian CSS, dan array soal. Tugasmu melengkapi CSS dan menulis perilakunya.
Struktur HTML (sudah ada, jangan ganti id dan class-nya)
| Elemen | Ketentuan |
|---|---|
button#tombol-tema | Tombol ganti tema di <header>. |
article#kuis.kartu | Kartu kuis yang membungkus semua bagian di bawah. |
span#nomor | Nomor soal yang sedang tampil (mulai 1). |
h2#pertanyaan | Teks soal, diisi JavaScript. |
div#opsi | Berisi tepat 3 <button class="opsi"> sebagai anak langsung. |
p#hasil | Pesan hasil jawaban, kosong sebelum menjawab. |
span#skor | Jumlah jawaban benar, mulai 0. |
button#berikutnya | Pindah ke soal berikutnya, selalu bisa diklik. |
Data soal
Soal ada di array daftarSoal, tiap item berbentuk { tanya, opsi: [3 teks], benar: indeks }. Minimal 3 soal.
Gaya wajib
:rootmendefinisikan--latar: #ffffff,--teks,--kartu, dan--utama.bodymemakaibackground-color: var(--latar)dancolor: var(--teks). Jangan beri transition pada latar body.html[data-tema="gelap"]mengganti--latarmenjadi#121212(serta--teksdan--kartu)..opsi.benarberlatar#2e7d32dan.opsi.salahberlatar#c62828, keduanya teks putih.- Warna jawaban hanya lewat class. Jangan menulis
element.style.backgrounddari JavaScript.
Perilaku JavaScript
tampilkanSoal()mengisi#pertanyaan,#nomor, dan teks ketiga opsi daridaftarSoal[indeks]. Opsi yang benar diberidata-benar="true", opsi lain tidak punya atribut itu. Fungsi ini juga melepas classbenar/salah, mengaktifkan lagi semua opsi, dan mengosongkan#hasil.- Klik sebuah opsi:
- opsi itu mendapat class
benarbiladata-benar="true", selain itu classsalah; - semua opsi diberi
disabled = truesupaya tidak bisa menjawab dua kali; #hasildiisi teks yang diawaliBenaratauSalah(contoh:Salah, jawabannya <link>);- bila benar, skor bertambah 1 dan
#skordiperbarui.
- opsi itu mendapat class
- Klik
#berikutnya:indeksnaik satu dan kembali ke0setelah soal terakhir (pakai%), lalu panggiltampilkanSoal(). Skor tidak direset. - Klik
#tombol-tema: pasangdata-tema="gelap"di<html>lewatdocument.documentElement.dataset.tema, klik lagi untuk melepasnya. Opsional: ganti teks tombol.
Contoh hasil
Opsi yang diklik langsung hijau karena class benar, skor jadi 1, dan saat tema gelap aktif latar halaman berubah ke #121212 tanpa satu pun warna ditulis di JavaScript.
Latihan kode: Kartu Kuis Interaktif
Lengkapi kartu kuis pilihan ganda yang memakai ketiga bahasa sekaligus: tandai opsi benar dengan data-benar="true", siapkan class .benar (hijau #2e7d32) dan .salah (merah #c62828) di CSS, lalu tulis JavaScript yang memasang class itu saat opsi diklik, mematikan semua opsi, mengisi #hasil dan #skor, memuat soal berikutnya dari array lewat #berikutnya (kembali ke soal pertama setelah soal terakhir), dan mengganti tema lewat data-tema="gelap" di elemen html dengan variabel CSS --latar.