JavaScript

Create a To-Do List App with HTML, CSS and JavaScript

Create a To-Do List App with HTML, CSS and JavaScript

Welcome to an exciting coding journey where we create a functional and visually stunning JavaScript Todo List App from scratch! In this comprehensive tutorial, I’ll guide you step-by-step through building a Todo List application using HTML, CSS and JavaScript, while integrating cool animations and persistent local storage functionality. Let’s dive in!

Overview

  • Learn to implement CRUD Operations (Create, Read, Update, Delete) for task management.
  • Explore localStorage integration, enabling tasks to persist even after refreshing or closing the browser.
  • Add sleek animations for task creation and deletion, making the app dynamic and user-friendly.

By the end, you’ll have a fully functional Todo List App that’s not only practical but also aesthetically pleasing.

Build a Todo List App?

Todo list apps are perfect for:

  1. Boosting Productivity: Organize tasks and manage your day efficiently.
  2. Learning Web Development: This project helps you master fundamental concepts like DOM manipulation, event handling, and localStorage.

Set Up Your Project

  1. Create a new folder named TodoApp.
  2. Inside the folder, create three files:
    • index.html (structure)
    • style.css (design)
    • script.js (functionality)

Build the Basic HTML Structure

Start with a clean HTML boilerplate in index.html. Link the style.css and script.js files for styling and interactivity.

code<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Todo App</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<div class="todo-header">
<h2>Todo List</h2>
<img src="images/notebook.gif" alt="Notebook" height="50">
</div>
<div class="todo-body">
<input type="text" id="todoInput" placeholder="Add your items">
<button id="addBtn">+</button>
</div>
<ul id="todoList"></ul>
<p id="alertMessage"></p>
</div>
<script src="script.js"></script>
</body>
</html>

Style Your Todo App with CSS

Make your app visually appealing by adding the following to style.css:

codebody {
font-family: 'Poppins', sans-serif;
background: linear-gradient(to bottom, #78c1f3, #ffffff);
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}

.container {
background: #fff;
padding: 20px;
border-radius: 10px;
width: 400px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
}

.todo-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 20px;
}

.todo-body {
display: flex;
justify-content: space-between;
margin-bottom: 20px;
}

#todoInput {
flex: 1;
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
}

#addBtn {
padding: 10px;
background: limegreen;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
}

Implement JavaScript Functionality

In script.js, add the core functionality:

codeconst todoInput = document.getElementById("todoInput");
const addBtn = document.getElementById("addBtn");
const todoList = document.getElementById("todoList");
const alertMessage = document.getElementById("alertMessage");

let todos = JSON.parse(localStorage.getItem("todos")) || [];

function displayTodos() {
todoList.innerHTML = "";
todos.forEach((todo, index) => {
const li = document.createElement("li");
li.innerHTML = `
<span ${todo.completed ? 'style="text-decoration: line-through;"' : ''}>
${todo.text}
</span>
<button onclick="toggleComplete(${index})">✔</button>
<button onclick="deleteTask(${index})">🗑️</button>
`;
todoList.appendChild(li);
});
}

function addTask() {
const task = todoInput.value.trim();
if (!task) {
showAlert("Please enter a task.");
return;
}
todos.push({ text: task, completed: false });
localStorage.setItem("todos", JSON.stringify(todos));
todoInput.value = "";
displayTodos();
showAlert("Task added successfully!");
}

addBtn.addEventListener("click", addTask);

Complete & Delete Tasks

codefunction toggleComplete(index) {
todos[index].completed = !todos[index].completed;
localStorage.setItem("todos", JSON.stringify(todos));
displayTodos();
}

function deleteTask(index) {
todos.splice(index, 1);
localStorage.setItem("todos", JSON.stringify(todos));
displayTodos();
}

function showAlert(message) {
alertMessage.textContent = message;
setTimeout(() => (alertMessage.textContent = ""), 3000);
}

Add Animations

Make the app more dynamic by adding animations to style.css:

codeli {
animation: fadeIn 0.5s ease-in-out;
}

@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(-10px);
}
to {
opacity: 1;
transform: translateY(0);
}
}

Test and Customize

Test your app by adding, completing, and deleting tasks. You can customize further by:

  • Adding priorities for tasks.
  • Setting due dates.
  • Styling completed tasks differently.

Conclusion

You’ve built a functional Todo List App with cool animations and local storage integration. This project is a fantastic way to practice core JavaScript concepts and improve your web development skills.

Rick Bowen (JavaScript)

About Rick Bowen (JavaScript)

Hi, I'm Rick! I'm an accomplished Software Engineer with broad and deep expertise in Go JavaScript, TypeScript, Shell (bash/zsh), Git, SQL & NoSQL Databases, Containers + Kubernetes, Distributed Systems, Reliability Engineering, DevOps, Cloud / Network / Application Security, Identity / Access Management, Linux, macOS/Darwin, CI/CD, SaltStack, Terraform, AWS, GCP, Azure, Internet Protocols, and much more.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments