files/en-us/web/api/canvasrenderingcontext2d/linecap/index.md
{{APIRef("Canvas API")}}
The
CanvasRenderingContext2D.lineCap
property of the Canvas 2D API determines the shape used to draw the end points of lines.
[!NOTE] Lines can be drawn with the {{domxref("CanvasRenderingContext2D.stroke()", "stroke()")}}, {{domxref("CanvasRenderingContext2D.strokeRect()", "strokeRect()")}}, and {{domxref("CanvasRenderingContext2D.strokeText()", "strokeText()")}} methods.
One of the following:
"butt"
"round"
"square"
This example rounds the end caps of a straight line.
<canvas id="canvas"></canvas>
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(20, 20);
ctx.lineWidth = 15;
ctx.lineCap = "round";
ctx.lineTo(100, 100);
ctx.stroke();
{{ EmbedLiveSample('Changing_the_shape_of_line_caps', 700, 180) }}
In this example three lines are drawn, each with a different value for the
lineCap property. Two guides to see the exact differences between the three
are added. Each of these lines starts and ends exactly on these guides.
The line on the left uses the default "butt" option. It's drawn completely
flush with the guides. The second is set to use the "round" option. This
adds a semicircle to the end that has a radius half the width of the line. The line on
the right uses the "square" option. This adds a box with an equal width and
half the height of the line thickness.
<canvas id="canvas" width="150" height="150"></canvas>
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
// Draw guides
ctx.strokeStyle = "#0099ff";
ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(140, 10);
ctx.moveTo(10, 140);
ctx.lineTo(140, 140);
ctx.stroke();
// Draw lines
ctx.strokeStyle = "black";
["butt", "round", "square"].forEach((lineCap, i) => {
ctx.lineWidth = 15;
ctx.lineCap = lineCap;
ctx.beginPath();
ctx.moveTo(25 + i * 50, 10);
ctx.lineTo(25 + i * 50, 140);
ctx.stroke();
});
{{EmbedLiveSample("Comparison_of_line_caps", "180", "180")}}
{{Specifications}}
{{Compat}}
ctx.setLineCap() is implemented in addition to this property.