About this set
Three analogue clock faces drawn entirely in CSS and set from the system time: a classic face with a dark rim and the numerals 1 to 12, a minimal face with a thin grey rim, four numerals and tick marks in between, and a Roman-numeral wall clock with a warm cream face and brown hands. Use the classic face where a clock should read at a glance, the minimal one in a light interface that needs a quieter object, and the Roman one for editorial, hospitality or vintage designs. Each numeral is an element with a –i index from 0 to 11, and a single transform places it on a 68 pixel ring while keeping the text upright, so there is no trigonometry in the script. The hands are three bars pivoting at the centre. A short vanilla script sets –h, –m and –s angles on every face once a second, re-timed to the second boundary, and nothing else. The Bootstrap version builds the face from .rounded-circle, .border and positioning utilities, and the Tailwind version uses rotate utilities that read the same custom properties.
What’s included
- Classic, minimal and Roman-numeral faces
- Numerals placed on a ring with one CSS transform per --i index
- Hands rotate from --h, --m and --s custom properties set by the script
- Each face is role="img" with a name that updates once a minute
- Plain CSS, Bootstrap and Tailwind versions of the same faces
Accessibility
Each face is role="img" with an accessible name such as "Clock showing 2:41 PM", rewritten only when the minute changes, so the decorative numerals, ticks and hands are not read one by one. The name is not a live region, so screen readers are never interrupted. The clocks have no controls and no animation; the hands jump once a second.
Customise it
Change --ink, --hand-s, --rim, --face, --tick and --num-font on .clock in plain CSS. In Bootstrap the same variables sit on .clock with --bs-border-color and --bs-border-width for the rim; in Tailwind edit the border-, bg- and text- colour utilities on each face and its hands.






