Skip to content
Subscribe to RSS Find me on GitHub Follow me on Twitter

Build a Quiz App Using HTML, CSS, and JavaScript

Title: Build a Quiz App Using HTML, CSS, and JavaScript


Building a quiz app using HTML, CSS, and JavaScript is a popular and relevant topic in web development. Quiz apps are widely used for educational purposes, assessments, and entertainment. In this article, we will explore the key steps involved in creating a quiz app from scratch.

To build a quiz app, we will need to set up the HTML structure, style it using CSS, and implement interactive functionality using JavaScript. These steps will allow us to create a user-friendly and engaging quiz experience. Let's dive into each step in detail to learn how to build a quiz app using HTML, CSS, and JavaScript.


Before diving into building a quiz app using HTML, CSS, and JavaScript, there are a few prerequisites that you should have:

  1. Basic knowledge of HTML, CSS, and JavaScript: It is important to have a solid understanding of these three core web technologies. HTML is used to structure the content of the app, CSS is used for styling and layout, and JavaScript is used for adding interactivity.

  2. A code editor: You will need a code editor to write and edit the HTML, CSS, and JavaScript code for your quiz app. There are many code editors available, such as Visual Studio Code, Sublime Text, and Atom, so choose the one that you are most comfortable with.

  3. A web browser: You will need a web browser to preview and test your quiz app. Popular web browsers like Google Chrome, Mozilla Firefox, and Safari are commonly used for this purpose.

Having these prerequisites in place will ensure that you have the necessary tools and knowledge to successfully build a quiz app using HTML, CSS, and JavaScript.

Step 1: Setting Up the HTML Structure

When building a quiz app, it is crucial to structure the quiz using HTML. This ensures that the content is organized and easy to navigate for both the developer and the user.

To set up the basic structure of the quiz app, there are several essential HTML elements that need to be included:

  • Quiz container: This is the main container that holds all the quiz questions and options.
  • Question container: Inside the quiz container, each question should have its own container to hold the question text.
  • Options container: Within the question container, there should be a container to hold the answer options for each question.
  • Submit button: Finally, a submit button should be included at the end of the quiz to allow the user to submit their answers.

Here's an example of HTML code that sets up the basic structure:

<div id="quiz-container">
  <div class="question-container">
    <h2>Question 1</h2>
    <div class="options-container">
      <input type="radio" name="question1" value="option1">
      <label for="option1">Option 1</label>
      <input type="radio" name="question1" value="option2">
      <label for="option2">Option 2</label>
      <input type="radio" name="question1" value="option3">
      <label for="option3">Option 3</label>
  <div class="question-container">
    <h2>Question 2</h2>
    <div class="options-container">
      <input type="radio" name="question2" value="option1">
      <label for="option1">Option 1</label>
      <input type="radio" name="question2" value="option2">
      <label for="option2">Option 2</label>
      <input type="radio" name="question2" value="option3">
      <label for="option3">Option 3</label>
  <button id="submit-button">Submit</button>

In this example, there are two questions with their respective options containers. Each option is represented by a radio button with a corresponding label. The submit button is also included at the end of the quiz container.

Step 2: Styling the Quiz with CSS

CSS plays a significant role in enhancing the visual appeal of the quiz app. It allows us to customize the appearance of various elements and create a visually appealing user interface.

To style the quiz app, we need to use CSS properties and selectors. Here are the key areas that we can focus on styling:

Styling the containers

We can use CSS to style the quiz container, question container, and options container. This includes setting the background color, border, padding, and margin to create a visually pleasing layout.

.quiz-container {
  background-color: #f5f5f5;
  border: 1px solid #ddd;
  padding: 20px;
  margin-bottom: 20px;

.question-container {
  background-color: #fff;
  border: 1px solid #ddd;
  padding: 20px;
  margin-bottom: 20px;

.options-container {
  background-color: #fff;
  border: 1px solid #ddd;
  padding: 20px;

Customizing the question and options

We can use CSS to customize the font, font size, and color of the questions and options. This allows us to make them more readable and visually appealing.

.question {
  font-weight: bold;
  font-size: 18px;
  color: #333;

.option {
  font-size: 16px;
  color: #555;

Applying hover effects

We can use CSS to apply hover effects to the options. This provides visual feedback to the user when they hover over an option, making the quiz app more interactive.

.option:hover {
  background-color: #f5f5f5;
  cursor: pointer;

By using CSS properties and selectors, we can style the quiz app according to our design preferences. These examples demonstrate some of the ways we can style the quiz app, but feel free to experiment and customize the styles according to your own preferences.

Step 3: Implementing Interactive Functionality with JavaScript

JavaScript plays a crucial role in adding interactivity to the quiz app. It enables us to handle user input, evaluate their answers, and display the quiz result.

To handle user input, we can use JavaScript event listeners to capture the user's selection when they choose an option. We can attach an event listener to each option element and update a variable or an array to store the selected answer.

To evaluate user answers, we can compare the selected answer with the correct answer for each question. We can create a function that checks if the selected answer matches the correct answer and increment a score variable accordingly.

Finally, to display the quiz result, we can create a function that calculates the score percentage based on the number of correct answers and the total number of questions. We can then display the score to the user, along with any relevant feedback or messages.

Here is an example code snippet that demonstrates the JavaScript functionality:

// Variables to store user selections and quiz score
let userSelections = [];
let score = 0;

// Event listener for capturing user selection
const options = document.querySelectorAll('.option');
options.forEach(option => {
  option.addEventListener('click', () => {
    const selectedOption = option.textContent;

// Function to evaluate user answers
function evaluateAnswers() {
  const correctAnswers = ['B', 'A', 'C']; // Example correct answers

  for (let i = 0; i < userSelections.length; i++) {
    if (userSelections[i] === correctAnswers[i]) {

// Function to display the quiz result
function displayResult() {
  const totalQuestions = 3; // Example total number of questions
  const scorePercentage = (score / totalQuestions) * 100;

  const resultContainer = document.querySelector('.result');
  resultContainer.textContent = `Your score: ${scorePercentage}%`;

// Function to handle quiz submission
function submitQuiz() {

// Event listener for quiz submission
const submitButton = document.querySelector('.submit-button');
submitButton.addEventListener('click', submitQuiz);

This code snippet demonstrates how JavaScript can handle user input, evaluate their answers, and display the quiz result. By utilizing event listeners, variables, and functions, we can create an interactive quiz app that engages users and provides them with feedback on their performance.

Step 4: Adding Additional Features

To enhance the quiz app and make it more engaging, there are several optional features that can be added. These features include a timer for each question, multiple levels of difficulty, and randomizing questions.

Timer for each question

Adding a timer for each question can create a sense of urgency and add a challenge to the quiz. To implement this feature, you can use JavaScript to start a timer when a question is displayed and automatically move to the next question when the timer runs out.

function startTimer() {
  var timeLeft = 10; // Set the initial time in seconds

  var timer = setInterval(function() {
    document.getElementById("timer").innerText = timeLeft; // Update the timer display

    if (timeLeft === 0) {
      // Move to the next question or display the result
  }, 1000); // Update the timer every second

In the HTML, you can add a timer element where the remaining time will be displayed:

<div id="timer">10</div>

Multiple levels of difficulty

To make the quiz more challenging, you can implement multiple levels of difficulty. Each level can have a different set of questions or varying difficulty levels for the same set of questions.

To implement this feature, you can create different arrays of questions for each level and provide options for users to choose the desired level before starting the quiz. Using JavaScript, you can load the appropriate set of questions based on the selected level.

var easyQuestions = [
  // Easy level questions

var mediumQuestions = [
  // Medium level questions

var hardQuestions = [
  // Hard level questions

function loadQuestions(level) {
  var questions;

  if (level === "easy") {
    questions = easyQuestions;
  } else if (level === "medium") {
    questions = mediumQuestions;
  } else if (level === "hard") {
    questions = hardQuestions;

  // Load the questions and start the quiz

Randomizing questions

To add more variety to the quiz, you can randomize the order in which the questions are presented. This can prevent users from memorizing the sequence of questions and make the quiz more challenging.

To implement this feature, you can use JavaScript to shuffle the array of questions before displaying them to the user. Here's an example of how you can shuffle an array using the Fisher-Yates algorithm:

function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;

  while (currentIndex !== 0) {
    randomIndex = Math.floor(Math.random() * currentIndex);

    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;

  return array;

var shuffledQuestions = shuffle(questions);

By shuffling the questions array before displaying them, you can ensure that each quiz attempt presents the questions in a different order.

With these additional features, you can make your quiz app more engaging and customizable. Experiment with different options and functionalities to create a unique and enjoyable quiz experience for your users.


In this article, we have explored the process of building a quiz app using HTML, CSS, and JavaScript. Let's recap the key steps involved:

  1. Setting up the HTML structure: We created the necessary containers for the quiz, questions, options, and submit button.
  2. Styling the quiz with CSS: We enhanced the visual appeal of the quiz by applying CSS properties and selectors to style the containers, customize the question and options, and add hover effects.
  3. Implementing interactive functionality with JavaScript: We used JavaScript to handle user input, evaluate user answers, and display the quiz result.
  4. Adding additional features: We discussed optional features such as a timer, multiple levels of difficulty, and randomizing questions.

It's important to note that mastering web development skills requires practice and experimentation. Building your own quiz apps is a great way to apply what you've learned and explore further possibilities. Don't be afraid to try different approaches and experiment with new features.

So, go ahead and start building your own quiz app! Have fun exploring the endless possibilities of HTML, CSS, and JavaScript. Happy coding!