CSS components

CSS Progress Checklist Generator

Create a to-do or onboarding checklist with custom checkboxes, crossed-out completed tasks, a live progress bar and a message when everything is done.

Live preview

Runs entirely in your browser. Nothing is uploaded to any server.

Why use this checklist component

Real checkboxes

Native inputs keep keyboard and screen reader support.

Visible progress

A bar and counter motivate people to finish.

Reusable

The script handles any number of checklists on one page.

How to make a progress checklist

  1. List the tasksOne per line, and start a line with [x] to show it as done.
  2. Style itChoose the done style, check shape, colours and width.
  3. Copy the codeCopy the snippets or download a working page.

How the custom checkbox works

The real checkbox is visually hidden but still focusable, and a sibling span draws the box. The :checked + selector fills the box and scales in a tick mark made from two borders rotated by 45 degrees, so no icons or images are needed.

The completed style uses the general sibling selector, so the text is crossed out by CSS alone. JavaScript is only used to update the counter, the progress bar and the completion message.

Animated strike

A background line grows across the text and wraps across lines.

Focus ring

Keyboard users see a clear outline around the box.

Progress bar

role="progressbar" exposes the percentage to assistive tech.

Progress checklist FAQ

Does the checklist save its state?

Not by default. To keep ticks after a reload, save each checkbox state in localStorage inside the update function.

Can I have several checklists on one page?

Yes. Every element with the data-pc attribute gets its own counter and progress bar.

Will screen readers announce the checkboxes?

Yes. Each item uses a native checkbox inside a label, so it is announced with its text and checked state.

Does it work without JavaScript?

The checkboxes and strike-through work with CSS only. Only the counter, bar and completion message need the script.

How do I change the tick colour?

Change the border colour in the .pc-box::after rule, which is white by default.

Try other CSS component tools

More free tools from My Panda Toolbox.