HomeJavascriptHandwritten Text Generator with HTML, CSS & JS

Handwritten Text Generator with HTML, CSS & JS

Do you love stylish fonts and personalized art? How about combining the two to create your own handwritten name image generator? In this tutorial, we’ll build a fun web app that lets you type in your name, pick a handwriting-style font, and download the output as an image — all using basic HTML, CSS, and JavaScript!

Let’s break down how it works from top to bottom.

Video Tutorial:

HTML: The Structure

HTML is the skeleton of your web app — it defines what elements appear on the screen.

Here’s what we’ve included:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Handwritten Text</title>
    <link
      href="https://fonts.googleapis.com/css2?family=Alex+Brush&family=Dancing+Script:wght@400..700&family=Pacifico&display=swap"
      rel="stylesheet"
    />
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <div class="container">
      <h2>Handwriting Style Name</h2>
      <input type="text" id="nameInput" placeholder="Enter your Name" />
      <select id="fontSelector">
        <option value="Alex Brush">Alex Brush</option>
        <option value="Dancing Script">Dancing Script</option>
        <option value="Pacifico">Pacifico</option>
      </select>
      <br />
      <canvas id="nameCanvas" width="400" height="100"></canvas>
      <br />
      <button onclick="downloadImage()">Download Image</button>
    </div>

    <script src="script.js"></script>
  </body>
</html>

Explanation:

  • Google Fonts link: Loads beautiful handwriting fonts like Alex Brush, Dancing Script, and Pacifico.

  • Input field: Lets the user type in their name.

  • Select dropdown: Allows users to choose from the loaded fonts.

  • Canvas: This is where the name is drawn using the selected font.

  • Button: On clicking, it triggers the download of the canvas as an image.

    CSS: The Styling
    CSS makes everything look nice. It defines colors, positioning, spacing, fonts, and layout styles. Here’s the full CSS:

body {
  background-color: #01dd8f;
  font-family: "Poppins", sans-serif;
  text-align: center;
}
.container {
  background-color: #151729;
  width: min(500px, 90vw);
  position: absolute;
  transform: translate(-50%, -50%);
  left: 50%;
  top: 50%;
  padding: 30px;
  border-radius: 10px;
}
h2 {
  color: #ffffff;
  font-weight: 400;
  letter-spacing: 3px;
}
button {
  background-color: #01dd8f;
  padding: 15px 30px;
  border: none;
  outline: none;
  border-radius: 5px;
}
canvas {
  background-color: #ffffff;
  border: none;
  margin-top: 20px;
  border-radius: 5px;
}
input {
  background-color: #2a2a46;
  border: none;
  outline: none;
  padding: 15px 30px;
  color: #ffffff;
}
input::placeholder {
  color: #ffffff;
}
select {
  outline: none;
  padding: 15px;
  background-color: #01dd8f;
  color: #ffffff;
}

Explanation:

  • Body: Sets a vibrant green background and a clean sans-serif font.

  • Container: Centers the content with padding and a dark background.

  • Typography: Headings and placeholders have subtle customizations for readability and style.

  • Canvas: Has a white background to clearly display the text.

  • Buttons/Inputs: Styled to match the overall neon/dark theme with rounded corners and easy-to-read colors.

JavaScript: The Functionality

JavaScript is where the magic happens. It handles everything interactive — drawing on canvas, updating fonts, and downloading the image.

function drawName() {
  let canvas = document.getElementById("nameCanvas");
  let ctx = canvas.getContext("2d");
  let name = document.getElementById("nameInput").value;
  let font = document.getElementById("fontSelector").value;
  document.fonts.ready.then(() => {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    ctx.font = `50px ${font}`;
    ctx.fillStyle = "black";
    ctx.textAlign = "center";
    ctx.fillText(name, canvas.width / 2, canvas.height / 2 + 15);
  });
}
document.getElementById("fontSelector").addEventListener("change", () => {
  document.fonts
    .load(`50px ${document.getElementById("fontSelector").value}`)
    .then(drawName);
});

document.getElementById("nameInput").addEventListener("input", () => {
  document.fonts
    .load(`50px ${document.getElementById("fontSelector").value}`)
    .then(drawName);
});
function downloadImage() {
  let canvas = document.getElementById("nameCanvas");
  let link = document.createElement("a");
  link.download = "handwritten-name.png";
  link.href = canvas.toDataURL("image/png");
  link.click();
}
  • drawName(): Gets the input text and selected font, and draws it on the canvas using fillText().

  • document.fonts.ready: Ensures the font is fully loaded before drawing to avoid default fallbacks.

  • Event listeners: Watch for changes in the input field and dropdown menu, and automatically redraw the canvas in real time.

  • downloadImage(): Converts the canvas to a PNG image and triggers a download using an invisible anchor tag.

✅ Final Thoughts

This project is a great way to practice real-world web development skills:

  • ✅ Handling user input

  • ✅ Drawing with canvas

  • ✅ Working with web fonts

  • ✅ Dynamically updating the UI

  • ✅ Exporting graphics as images

It’s a fun and creative app that you can share with friends or even use in your own portfolio.

RELATED ARTICLES

LEAVE A REPLY

Please enter your comment!
Please enter your name here

ten + four =

Most Popular