Article Body
👋 Introduction
When you're filling out a form that limits your text to a certain number of characters — like a tweet or feedback form — it's helpful to see a live character counter. This shows how many characters you've typed or how many you have left.
In this tutorial, we'll build a simple but effective live character counter using HTML, CSS, and JavaScript. We’ll break everything down step-by-step so even beginners can follow along.
🔧 What You’ll Build
You'll build a text box that:
-
Counts characters in real time
-
Shows how many characters are remaining
-
Changes color when approaching or exceeding the limit
🛠️ Tools Needed
-
A code editor (like VS Code)
-
A browser (like Chrome)
-
Basic knowledge of HTML, CSS, and JavaScript
✅ Step-by-Step Guide
🧱 Step 1: Create the HTML Structure
First, let’s set up the basic structure in HTML.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Live Character Counter</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="container">
<h2>Write Your Message</h2>
<textarea id="textbox" maxlength="100" placeholder="Type your message here..."></textarea>
<p id="counter">0 / 100 characters</p>
</div>
<script src="script.js"></script>
</body>
</html>
What’s happening:
-
We added a
<textarea>
with amaxlength
of 100. -
There’s a
<p>
tag to show the live character count. -
CSS and JavaScript files are linked.
🎨 Step 2: Style It with CSS
Let’s make it look clean and modern.
/* styles.css */
body {
font-family: Arial, sans-serif;
background: #f4f4f4;
padding: 20px;
}
.container {
max-width: 400px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 10px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
textarea {
width: 100%;
height: 100px;
padding: 10px;
font-size: 16px;
resize: none;
border: 1px solid #ccc;
border-radius: 5px;
}
#counter {
text-align: right;
margin-top: 10px;
font-size: 14px;
color: #555;
}
.warning {
color: orange;
}
.exceeded {
color: red;
}
What’s happening:
-
Basic styling for readability and layout.
-
We added
.warning
and.exceeded
classes for color changes when character count increases.
💡 Step 3: Add the JavaScript Functionality
Now let’s make it interactive.
// script.js
const textbox = document.getElementById('textbox');
const counter = document.getElementById('counter');
const maxLength = textbox.getAttribute('maxlength');
textbox.addEventListener('input', () => {
const currentLength = textbox.value.length;
counter.textContent = `${currentLength} / ${maxLength} characters`;
// Change color based on count
if (currentLength >= maxLength) {
counter.classList.remove('warning');
counter.classList.add('exceeded');
} else if (currentLength >= maxLength * 0.8) {
counter.classList.remove('exceeded');
counter.classList.add('warning');
} else {
counter.classList.remove('warning', 'exceeded');
}
});
Explanation:
-
We get the textarea and counter elements using
getElementById
. -
We listen for the
input
event, which triggers whenever the user types. -
We calculate how many characters are used and update the counter text.
-
Based on the count, we add or remove CSS classes to change the counter's color.
🎯 Bonus: Customize the Character Limit
If you want a different character limit, just change the maxlength
in the HTML:
<textarea id="textbox" maxlength="200"></textarea>
And JavaScript will automatically pick it up using:
const maxLength = textbox.getAttribute('maxlength');
No code change needed elsewhere!
✅ Final Output
When you run the code:
-
You’ll see a styled text box.
-
As you type, the character count updates instantly.
-
The counter turns orange at 80% and red when the limit is reached.
🎁 Use Cases
-
Tweet composers
-
Contact or feedback forms
-
Description fields in user profiles
-
Anywhere character limits matter!
🧠 Wrap-Up
We just created a live character counter that’s responsive, clean, and user-friendly. By combining HTML for structure, CSS for style, and JavaScript for interactivity, you’ve built a real-world component that can be used in many applications.