Tutorials Books Videos Forums

Change the theme! Search!
Rambo ftw!

Customize Theme




Table of Contents

Modifying How Corners Look

by kirupa   |   filed under Working with the Canvas

  Have questions? Discuss this HTML5 / Canvas tutorial with others on the forums.

When drawing on the canvas, you create corners all the time:

This is such a frequent occurrence, you normally don't even pay much attention to all the times it happens. We are going to change that with this tutorial. In the next couple of sections, you will not only learn to notice what these corners look like, you will also learn all about the lineJoin property and how to adjust their appearance.


Meet the lineJoin Property

By default, your corners have a particular look to them. That default look is fine and all, but you can totally change what your corners look like. The way you do that is by setting the lineJoin property:

The lineJoin property takes three values: miter, round, bevel. A value of miter is the default behavior, and it creates sharp corners:

The round value, shockingly, creates rounded corners:

The bevel property creates triangular corners:

You set the lineJoin property on our drawing context object...just like almost all of the drawing-related properties that we've seen so far. To see the lineJoin property in action, take a look at the following code:

// the triangle
context.moveTo(100, 100);
context.lineTo(100, 300);
context.lineTo(300, 300);

// the outline
context.lineWidth = 10;
context.strokeStyle = '#666666';
context.lineJoin = "round";

// the fill color
context.fillStyle = "#FFCC00";

This code draws a triangle. What makes this relevant for this tutorial is the highlighted line where we set the lineJoin property to a value of round. This would result in a triangle whose corners are all rounded. Simple bimple.

The miterLimit Property

As if setting the lineJoin property to miter isn't exciting enough, you can set the miterLimit property:

context.miterLimit = 15;

This property stands for the ratio between half of the lineWidth value and the miter length. It acts as a threshold where if the value is too small, your lineJoin property value of miter will not kick in. I haven't found a use for it in real life, but I figured I would mention it here for the sake of completeness.


Putting my general snarkiness of this topic aside, it's admirable that we have so much control over something that seems trivial. The lineJoin property's default value of miter is appropriate for many situations, but when you are using the canvas to represent charts or other very line-heavy things, being able to customize how the corners look is essential...maybe!

Just a final word before we wrap up. If you have a question and/or want to be part of a friendly, collaborative community of over 220k other developers like yourself, post on the forums for a quick response!

Kirupa's signature!

The KIRUPA Newsletter

Thought provoking content that lives at the intersection of design 🎨, development 🤖, and business 💰 - delivered weekly to over a bazillion subscribers!


Creating engaging and entertaining content for designers and developers since 1998.



Loose Ends

:: Copyright KIRUPA 2024 //--