Skip to main content
← πŸ“„ HTML & the platformΒ·Module A4 Β· Lesson 9
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 webgl and webgl2 for 3D.

When NOT to use canvas

  • For shapes you could do with SVG β†’ use SVG (scales, accessible, CSS-styleable).
  • For text β†’ use <p>, not fillText(). 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.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.