TaskAdd a <canvas id='c' width='200' height='100' aria-label='A blue square'></canvas>. Then in JS, get its 2D context, set fillStyle to '#3B82F6', and fillRect(10, 10, 80, 80).
<canvas>: pixel-level graphics intro
100 XP8 min
Theory
When pixels matter
<canvas> is a JS-driven drawing surface. Use it for charts (Chart.js), games, custom photo editing, image processing β anywhere you need pixel control that HTML/CSS can't give you.
<canvas id="chart" width="400" height="200" aria-label="Sales chart"></canvas>
<script>
const ctx = document.querySelector("#chart").getContext("2d");
ctx.fillStyle = "#3B82F6";
ctx.fillRect(20, 50, 100, 100);
ctx.beginPath();
ctx.arc(250, 100, 40, 0, Math.PI * 2);
ctx.fillStyle = "#22C55E";
ctx.fill();
</script>- `width` / `height` β set on the element, NOT in CSS. They define the internal coordinate system. CSS sizes only stretch the rendered output (and can blur it).
- `aria-label` β canvas is invisible to screen readers. The aria-label is the ONLY thing they can read.
- `getContext("2d")` β the 2D drawing API. There's also
webglandwebgl2for 3D.
When NOT to use canvas
- For shapes you could do with SVG β use SVG (scales, accessible, CSS-styleable).
- For text β use
<p>, notfillText(). Canvas text isn't selectable or screen-reader-readable. - For "fancy buttons" β use CSS, not canvas. Buttons need focus, hover, keyboard. Canvas gives you a pixel rectangle.
<canvas> is for problems where you actually need pixel control. For most UI, plain HTML+CSS is better.
π
Sign up to start coding
Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β card required, cancel anytime.
Sign up β free trial βFirst 10 lessons in each track are free. No card needed for those.