Driver FixRecommendedSound, Wi-Fi or graphics acting up? Check drivers firstFind missing or outdated drivers fast.Check DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsClean PCRecommendedOne scan can reveal what keeps slowing WindowsLook for cleanup and repair opportunities.Run Scan×
Skip to content
World desk6 min

HTML5 Canvas – DZone Refcard #151 Explained and Updated for Modern Browsers

DZone’s HTML5 Canvas Refcard remains a useful historical primer. Here is what its fundamentals mean today—and which browser, performance and compatibility claims need updating.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

DZone Refcard #151, HTML5 Canvas: A Web Standard for Dynamic Graphics by Simon Sarris, is a genuine standalone reference to the Canvas 2D API. It remains useful for learning the fundamentals, but its browser-support table and performance measurements describe the early 2010s, not current browser behavior. Use it for concepts, then verify API details and compatibility in the WHATWG HTML Standard and MDN Canvas documentation.

What the DZone HTML5 Canvas Refcard covers

The Refcard presents <canvas> as a JavaScript-controlled bitmap surface for shapes, text, images, animation, games, diagrams and interactive media. It covers canvas creation, drawing and styling methods, paths, transformations, compositing, images, pixel operations and performance techniques.

Its central concept is immediate-mode rendering: after a 2D shape is painted, the browser does not expose that shape as a retained object. Your application must keep its own scene data, redraw changed content, perform hit testing and provide any accessibility semantics.

The page also contrasts Canvas with SVG. That direction is still helpful, but claims that one technology is always faster are not reliable. Browser engine, device, scene complexity, text, filters, compositing and redraw strategy determine the result.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Canvas fundamentals

<canvas> contains a drawing buffer. Its default origin is the top-left corner; x increases to the right and y increases downward. Drawing is normally performed through JavaScript, while the element itself does not provide a DOM node for every line, circle or label.

Canvas can expose several context types, including 2D, WebGL, WebGL2, WebGPU and bitmap rendering where supported. A canvas chooses its context mode deliberately; obtaining a 2D context and then using the same element as a general WebGL fallback is not a dependable pattern.

Minimal modern setup

<canvas id="canvas" width="500" height="300">
  A blue rectangle appears here when Canvas is supported.
</canvas>
<script>
  const canvas = document.getElementById("canvas");
  const ctx = canvas.getContext("2d");

  if (!ctx) {
    throw new Error("2D Canvas is not supported");
  }

  ctx.fillStyle = "steelblue";
  ctx.fillRect(20, 20, 160, 100);
</script>

The width and height attributes define the internal bitmap. CSS dimensions are separate: CSS can scale that bitmap without adding drawing pixels, which commonly causes blur.

Core Canvas 2D API

Rectangles and paths

  • fillRect(), strokeRect() and clearRect() draw or clear rectangles.
  • beginPath(), moveTo(), lineTo(), arc(), arcTo(), quadraticCurveTo(), bezierCurveTo() and closePath() build paths.
  • fill(), stroke() and clip() apply a path.

Styles and effects

Use fillStyle and strokeStyle for colors, gradients or patterns. Line appearance is controlled with lineWidth, lineCap, lineJoin and miterLimit. Shadows use shadowColor, shadowBlur, shadowOffsetX and shadowOffsetY. Gradients come from createLinearGradient() and createRadialGradient(); repeating imagery can use createPattern().

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Text, images and pixels

  • Set font, textAlign and textBaseline; draw with fillText() or strokeText(); measure with measureText().
  • drawImage() copies and scales images, video or other canvas sources.
  • getImageData(), putImageData() and ImageData provide pixel access, but large or frequent readbacks can be expensive.

The full, current index is the MDN CanvasRenderingContext2D reference.

State, save/restore and transforms

Canvas stores rendering state—styles, clipping, compositing and the current transform—but not ordinary drawn objects. Protect temporary changes with save() and restore():

ctx.save();
ctx.translate(100, 100);
ctx.rotate(Math.PI / 4);
ctx.fillStyle = "tomato";
ctx.fillRect(-25, -25, 50, 50);
ctx.restore();

translate(), rotate(), scale(), transform(), setTransform() and resetTransform() modify coordinates. Rotation uses radians. setTransform() replaces the matrix; transform() multiplies the existing matrix. To clear the whole bitmap reliably after drawing under a transform:

ctx.save();
ctx.resetTransform();
ctx.clearRect(0, 0, canvas.width, canvas.height);
ctx.restore();

Animation architecture

Canvas animation is normally a redraw cycle: update application state, clear all or part of the surface, draw the current scene, then schedule another frame. Use requestAnimationFrame() so rendering follows the display refresh and pauses appropriately in background tabs.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
let lastTime = 0;
let x = 0;

function frame(time) {
  const delta = (time - lastTime) / 1000;
  lastTime = time;
  x += 100 * delta;

  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillRect(x % canvas.width, 50, 30, 30);
  requestAnimationFrame(frame);
}
requestAnimationFrame(frame);

For larger scenes, maintain a model of objects and use dirty rectangles, viewport culling, layers or prerendered assets instead of repainting invisible or unchanged work. Keep unrelated DOM updates out of the render loop.

High-DPI sizing and blurry output

A low-resolution backing store stretched with CSS is blurry, as are fractional coordinates and unhandled device-pixel ratios. This setup keeps a logical CSS size while allocating pixels for the display density:

function resizeCanvas(canvas, ctx, cssWidth, cssHeight) {
  const dpr = window.devicePixelRatio || 1;
  canvas.style.width = `${cssWidth}px`;
  canvas.style.height = `${cssHeight}px`;
  canvas.width = Math.round(cssWidth * dpr);
  canvas.height = Math.round(cssHeight * dpr);
  ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
}

Assigning canvas.width or canvas.height clears the bitmap and resets the drawing state, so resize code must restore styles, transforms and other settings.

Modern performance guidance

The Refcard’s broad advice—avoid unnecessary redraws, prerender repeated content, batch similar operations, draw only visible regions and measure on target devices—still applies. Its browser rankings and 2011-era benchmark results do not.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  • Use an offscreen canvas to prerender static or repeated assets.
  • Consider { alpha: false } when the surface never needs transparency.
  • Consider { willReadFrequently: true } for readback-heavy workloads, then benchmark because it can change the rendering path.
  • Use ImageBitmap where it fits your image pipeline.
  • Avoid getImageData() every frame unless pixel processing is essential.
  • Separate simulation and rendering rates when the application permits.

See MDN’s Canvas optimization guidance. Hardware acceleration is not a guarantee, and no fixed object count makes Canvas or SVG universally superior.

OffscreenCanvas and worker rendering

OffscreenCanvas can move rendering away from the main thread:

const canvas = document.querySelector("#canvas");
const offscreen = canvas.transferControlToOffscreen();
const worker = new Worker("renderer.js");
worker.postMessage({ canvas: offscreen }, [offscreen]);
// renderer.js
self.onmessage = (event) => {
  const canvas = event.data.canvas;
  const ctx = canvas.getContext("2d");
  ctx.fillStyle = "purple";
  ctx.fillRect(0, 0, canvas.width, canvas.height);
};

An OffscreenCanvas can also be constructed directly. Worker rendering helps when main-thread contention is material; message synchronization, asset loading and added architecture can outweigh the benefit for small scenes. Workers cannot access ordinary DOM APIs. The OffscreenCanvasRenderingContext2D reference documents worker-specific behavior.

Canvas, SVG, HTML/CSS, WebGL and WebGPU

Choose Best fit Main trade-off
HTML/CSS Text, layout, controls and standard interface elements Not intended for arbitrary raster drawing
SVG Identifiable vector objects, selectable text, DOM events, accessibility and resolution-independent graphics Large or frequently changing DOM scene graphs can be costly
Canvas 2D Games, simulations, image editing, signatures, effects and frequently redrawn raster scenes You manage objects, hit testing, redraws and semantics
WebGL/WebGL2 GPU-oriented 2D/3D, shaders and larger rendering workloads More complex graphics pipeline
WebGPU Modern GPU rendering and compute workloads requiring explicit control Higher implementation complexity and varying support

Canvas is not “only 2D”: the element can expose multiple rendering APIs. Libraries such as PixiJS, Konva, Fabric.js and EaselJS/CreateJS add scene management, interaction or animation helpers; they are optional and introduce their own abstractions and maintenance costs.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Accessibility requirements

Canvas does not automatically expose each painted object as semantic, selectable content. Do not make pixels the only representation of important information when HTML, text or controls can express it.

  • Put meaningful fallback text inside the <canvas> element.
  • Provide a DOM or textual alternative for charts, diagrams and data visualizations.
  • Keep buttons, menus and other interactive controls in the DOM where possible.
  • Provide keyboard operation and visible focus for surrounding controls.
  • Test screen readers, zoom, high contrast and reduced-motion settings.

ARIA can describe surrounding interface states, but it cannot turn an arbitrary bitmap into a complete semantic object model.

Exporting and cross-origin images

For a data URL, use canvas.toDataURL("image/png"). For asynchronous Blob output:

canvas.toBlob((blob) => {
  if (!blob) throw new Error("Canvas export failed");
  const url = URL.createObjectURL(blob);
  // Use url for a download or preview.
  URL.revokeObjectURL(url);
}, "image/png");

If an image was loaded from another origin without suitable CORS permission, drawing it can taint the canvas. Subsequent pixel reads or exports may fail. Configure server CORS headers and set the image element’s crossOrigin value before loading the image.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
HTML5 Canvas
  • Used Book in Good Condition

Common failure modes

getContext() returns null

The context type may be unsupported, the environment may impose limits, the canvas may already have an incompatible context, or control may have been transferred to an OffscreenCanvas.

clearRect() misses part of the drawing

A transform also affects clearing. Reset the transform temporarily or clear using the transformed coordinate system intentionally.

Text differs between devices

Canvas text depends on font availability, loading timing, browser text engines, operating systems and pixel density. Load required fonts before drawing and use ordinary HTML for content that must remain reliably searchable or selectable.

Pixel operations are slow

Large getImageData() and putImageData() operations can dominate frame time. Prefer compositing or drawImage() for ordinary copying and scaling.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

How to read the Refcard today

The DZone page at dzone.com/refcardz/html5-canvas-web-standard is best treated as a compact historical introduction. References to Internet Explorer 9/10, Safari 5, Chrome 12–16, Firefox 3.6–7 and similar releases date its compatibility discussion. For current behavior, consult the WHATWG Canvas specification, MDN getContext(), the 2D context reference and OffscreenCanvas documentation.

Quick Recap

Bestseller No. 1
SaleBestseller No. 3
Bestseller No. 5
HTML5 Canvas
HTML5 Canvas
Used Book in Good Condition
$78.00

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. Shenzhen desk3 min
    HONOR Expands Beyond Smartphones With Humanoid Robot RevealHONOR said it unveiled its first humanoid robot at MWC 2026 and named shopping assistance, workplace inspections, and supportive companionship as intended uses. Later Robotics D1 claims and a reported…
  2. Cupertino desk5 min
    Apple Unveils AirPods Max 2: The Upgrade That Should Have Happened Years AgoAirPods Max 2 adds H2-powered audio features and Apple claims up to 1.5× more effective ANC, but its design, Smart Case, and 20-hour battery rating are unchanged. Wired lossless audio…
  3. Cupertino desk4 min
    Apple’s OLED Touch MacBooks Are Coming—but the Dynamic Island Is the Real GambleApple has not announced an OLED touchscreen MacBook, but reports point to high-end models arriving in late 2026 or early 2027. The reported Mac Dynamic Island could be useful, but…
Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
Windows Errors? Fix Them Before They SpreadFree repair scan

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.