HTML Quiz Generator

Table of Contents

Instructions

Enter your quiz questions and options. After generating the quiz, you can preview it or copy the HTML code.

Generated ✔

PREVIEW

Generated Code 1
<script src="https://cdn.tailwindcss.com"></script> <style> @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;600;700&display=swap'); } .card { box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.1); transition: transform 0.2s ease; } .card:hover { transform: translateY(-5px); } .option { transition: all 0.2s ease; border-radius: 1rem; border: 2px solid transparent; } .option:hover { border-color: #3b82f6; transform: translateX(5px); } @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } } .animate-fade-in { animation: fadeIn 0.5s ease forwards; } </style> <div class="bg-white card rounded-2xl shadow-lg max-w-lg w-full p-8"> <form id="quizForm" class="space-y-6 animate-fade-in"> <!-- Questions will be inserted here --> </form> <div class="button-container mt-6 flex flex-col sm:flex-row gap-3"> <button onclick="submitQuiz()" class="flex-1 bg-gradient-to-r from-blue-500 to-indigo-600 text-white py-3 px-6 rounded-xl hover:shadow-lg transform hover:-translate-y-1 transition-all duration-200 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50"> <span class="font-semibold">Check Answers</span> </button> <button onclick="resetQuiz()" class="flex-1 bg-gray-200 text-gray-700 py-3 px-6 rounded-xl hover:bg-gray-300 transition-colors duration-200"> <span class="font-semibold">Try Again</span> </button> </div> <div id="result" class="mt-6 text-center animate-fade-in"> <div class="bg-gradient-to-r from-blue-50 to-indigo-50 p-4 rounded-xl border border-blue-100 hidden" id="scoreCard"> <p class="text-2xl font-bold text-blue-800" id="scoreText"></p> </div> </div> <div class="mt-8 text-center text-sm text-gray-500 animate-fade-in"> <hr class="my-4 border-gray-200"> <p> This quiz is made using <a href="https://salatigacity.blogspot.com/p/html-quiz-generator.html" class="underline hover:text-blue-600">Html Quiz Maker</a> by <a href="https://salatigacity.blogspot.com/">Coding Salatiga</a> brought to you by <a href="https://labinggris.com/">Labinggris.com</a> </p> </div> </div> <script> const questions = [
Generated Code 2
Generated Code 3
]; function loadQuiz() { const quizForm = document.getElementById('quizForm'); quizForm.innerHTML = ''; questions.forEach((q, index) => { const questionDiv = document.createElement('div'); questionDiv.className = "question animate-fade-in"; questionDiv.style.animationDelay = `${index * 0.1}s`; questionDiv.innerHTML = ` <div class="mb-4"> <p class="text-xl font-bold text-gray-800 mb-3">${index + 1}. ${q.question}</p> <div class="space-y-3"> ${q.options.map((option, i) => ` <label class="block p-3 border-2 border-transparent rounded-xl bg-gray-50 hover:bg-blue-50 transition-all duration-200 option"> <div class="flex items-center"> <div class="flex-shrink-0 w-6 h-6 rounded-full border-2 border-gray-300 flex items-center justify-center mr-3"> <div class="w-3 h-3 rounded-full bg-blue-500 scale-0 transition-transform duration-200"></div> </div> <input type="radio" name="question${index}" value="${i + 1}" class="sr-only" onchange="selectOption(${index}, ${i + 1})"> <span class="text-gray-700 font-medium">${option}</span> </div> </label> `).join('')} </div> ${q.explanation && q.explanation.trim() !== '' ? ` <div class="mt-4 ml-9 hidden explanation-text text-sm text-gray-500"> <div class="bg-blue-50 p-3 rounded-lg"> <strong class="text-blue-600">Explanation:</strong> ${q.explanation} </div> </div> ` : ''} </div> `; quizForm.appendChild(questionDiv); }); } function selectOption(questionIndex, optionIndex) { const quizForm = document.getElementById('quizForm'); const questionDiv = quizForm.querySelectorAll('.question')[questionIndex]; questionDiv.querySelectorAll('.option').forEach((label, i) => { const radio = label.querySelector('input[type="radio"]'); const indicator = label.querySelector('.w-3'); if (radio.value === String(optionIndex)) { label.classList.add('bg-blue-50', 'border-blue-100'); indicator.classList.remove('scale-0'); indicator.classList.add('scale-100'); } else { label.classList.remove('bg-blue-50', 'border-blue-100'); indicator.classList.remove('scale-100'); indicator.classList.add('scale-0'); } }); } function submitQuiz() { const quizForm = document.getElementById('quizForm'); const userAnswers = new FormData(quizForm); let correctCount = 0; questions.forEach((q, index) => { const userAnswer = parseInt(userAnswers.get(`question${index}`), 10); const questionDiv = quizForm.querySelectorAll('.question')[index]; const explanation = questionDiv.querySelector('.explanation-text'); if (explanation && q.explanation && q.explanation.trim() !== '') { explanation.classList.remove('hidden'); explanation.classList.add('block'); } questionDiv.querySelectorAll('.option').forEach((label, i) => { const radio = label.querySelector('input[type="radio"]'); const indicator = label.querySelector('.w-3'); if (i + 1 === q.correct) { label.classList.remove('bg-blue-50', 'bg-gray-50', 'hover:bg-blue-50'); label.classList.add('bg-green-50', 'border-green-100'); indicator.classList.remove('bg-blue-500'); indicator.classList.add('bg-green-500'); indicator.classList.remove('scale-0'); indicator.classList.add('scale-100'); } else if (radio.checked) { label.classList.remove('bg-blue-50', 'bg-gray-50', 'hover:bg-blue-50'); label.classList.add('bg-red-50', 'border-red-100'); indicator.classList.remove('bg-blue-500'); indicator.classList.add('bg-red-500'); indicator.classList.remove('scale-0'); indicator.classList.add('scale-100'); } label.style.pointerEvents = 'none'; }); if (userAnswer === q.correct) correctCount++; }); const totalQuestions = questions.length; const percentage = Math.round((correctCount / totalQuestions) * 100); const scoreCard = document.getElementById('scoreCard'); const scoreText = document.getElementById('scoreText'); scoreText.innerHTML = `Score: <strong class="text-blue-700">${correctCount}</strong> / <strong class="text-blue-700">${totalQuestions}</strong> ( ${percentage}% )`; scoreCard.classList.remove('hidden'); scoreCard.classList.add('animate-fade-in'); } function resetQuiz() { document.getElementById('scoreCard').classList.add('hidden'); document.getElementById('scoreCard').classList.remove('animate-fade-in'); loadQuiz(); } window.onload = loadQuiz; </script>