Join Joe Marini for an in-depth discussion in this video Introducing the Canvas tag, part of HTML5: Graphics and Animation with Canvas.
Let's begin by introducing the canvas element. The canvas element provides web pages with a place where they can draw free- form graphics of all kinds: shapes, images, text, lines, all kinds of objects. Just think if it as a piece of paper on the page where your script code can just draw anything it wants. The canvas tag is supported in all of the latest browsers, and I have listed them here. So as long as you have a modern version of that particular browser, it should support the canvas tag. Now, browsers that don't support canvas can display fallback content.
So if you have a browser that doesn't understand what a canvas is, you can place content inside the canvas tag that will be displayed to the user when their browser tries to render it. Pages can actually have more than one canvas and in fact, you can even overlap them. One of reasons why you might do this is because canvases can be set to be transparent. So you might have one canvas that contains say the background for a game and another canvas that has the characters in the game and so on and so forth, and you can position them on top of each other. So you can have more than one canvas, and it might come in handy to have more than one canvas.
Now it's important to know that canvas contents are created on the fly using script. Now what this means is once you've drawn stuff onto the canvas, there is no going back to get it again; it doesn't become part of the page DOM. So the bits are on the screen, and if you want to remember them, you have to care of it yourself. Once they're drawn, they are just forgotten about by the script engine. They're good for dynamic visual media, but the canvas is not good for things that you might want to manipulate later using script, and that's what SVG is for, and we'll take a little bit of a peek at that later.
Let's take a look at the canvas tag. The canvas coordinate system starts at the upper left, and it has two axes with increasing values of X going from the left to the right and the Y axis going from top to the bottom. All canvas element start out invisible, and that means that they are a transparent black background. So, there is the black canvas with the opacity set all the way down to 0, so they can't be seen. This graphic shows you what the coordinate system looks like. So on the left-hand side there we have the Y axis, increasing in values from top to bottom.
We have the X axis going from left to right, and we have 0, 0 point up there in the corner, and the width and height down on the lower right. The canvas tag is declared using the word 'canvas', and you typically provide it with an ID, because you'll be accessing it from script, and a width and a height. And that Fallback content you see there inside the canvas tag is what will be displayed to the user if a browser does not understand what a canvas is. Canvases come along with some attributes and functions as well, and here they are. There is a width and a height, which defined the width and the height of the canvas, and there is a couple of methods.
There is toDataURL and the getContext. So let's take a look at each one of those. The width and the height properties are pretty much self-explanatory. They are the width and the height of the canvas, and if you don't define them, they default to 300 wide by 150 height. And it's important to note that, as well as getting the values of these properties, they can be set. So you can dynamically change the width and the height of the canvas from your code. The toDataURL method takes the contents of the canvas and makes a static image out of them as a data URL.
Now to do this, you pass in the type of image you want the toDataURL method to create, such as image/png, and that support is mandatory according to the W3C spec. But some browsers may choose to support other formats like image/jpeg, or image/gif that kind of thing. So this method basically takes the contents and gives you back a Base64 encoded data URL of the contents. The getContext method is probably the more important ones. It retrieves the drawing context for the canvas, and the drawing context contains information about the canvas and provides all of the methods you use to draw with.
Things for setting colors and stroke styles and drawing shapes and so on, all of that is done using the context. So, let's actually switch over to our code editor and build our first canvas. Okay, so here I am in Aptana Studio and I'm going to open up the example files. So if you go into the Exercise Files folder, I'm going to go into the folder for this lesson and open up the start. This is our Firstcanvas_start.html. I'm also going to open up my snippets file, and I'll be referring to this throughout this course.
Essentially, this file contains all the code snippets for each one of the examples in order to go from the start state to the finished state, and I'm going to use these so that you guys don't have to watch me type. And if you have access to this file, you can follow along with me in your own code editor. So what we're going to first do is put a canvas into this document. I am going to put it right here in the body. So I'll go to the Snippets, and I'll take this canvas and I'll paste it in. So let's save. So here is the canvas tag, here's it's ID, and I've got a width and a height on there.
And here is the fallback content right there. It just says, "Your browser does not support canvas." All right, let's take a look at this in the browser. So we'll go out here. I am going to double-click, and you can see that nothing shows up. Remember, I said that canvases all start out as invisible. So we need to do something to make this canvas visible. Let's go back into the code. I am going to go back to my snippets and I'm going to copy this style declaration right here. And just like other HTML elements, you can define styles that affect canvas tags.
So I am going to copy this and go back to my source and paste that here in the head section. So I've defined a style for the canvas with this ID-- that's this guy right here--and it has a border which is a dotted 3-pixel black outline and a light gray background-color. So let's save, and let's go back to the browser, and let's refresh. Okay, now you can see that the canvas is visible, so it has a dotted border here, and the background is light gray.
So let's see how this looks in another browser. This is IE. Let's open this up in Firefox, and you can see it looks the same. Now we know how to declare a canvas tag. We know how to style it and make it visible. Let's take a look at how canvas compares to SVG, and then we'll move in to some actual drawing.
- Understanding the differences between Canvas and SVG Graphics
- Drawing shapes
- Drawing arcs and paths
- Rendering text
- Using clipping paths
- Drawing images and video
- Transforming objects with the translate tag
- Manipulating raw pixels
- Applying a custom transformation
- Creating an animation or slideshow control with Canvas