HTML Canvas rect() Method: Drawing Rectangles
The HTML Canvas rect() method is a fundamental function for drawing rectangles on a canvas. Unlike fillRect() and strokeRect(), which draw filled and outlined rectangles directly, the rect() method only defines a rectangular path. This path can then be filled or stroked using the fill() or stroke() methods, respectively, providing greater flexibility in how rectangles are rendered. In this guide, we'll explore how to use the rect() method effectively with clear examples and practical use cases.
Definition and Purpose
The rect() method adds a rectangular path to the current sub-path. This path can be filled, stroked, or clipped later. The method defines the shape of a rectangle and its location on the canvas, allowing for more complex shape manipulations when combined with other canvas methods.
Syntax
ctx.rect(x, y, width, height);
| Parameter | Type | Description |
|---|---|---|
x |
Number | The x-coordinate of the top-left corner of the rectangle. |
y |
Number | The y-coordinate of the top-left corner of the rectangle. |
width |
Number | The width of the rectangle. |
height |
Number | The height of the rectangle. |
Note: The rect() method does not directly draw anything on the canvas. It only creates a path. You must call either fill() or stroke() (or both) to render the shape. 📝
Basic Examples
Let's start with a basic example to illustrate how the rect() method works:
Example 1: Basic Rectangle Path
This example creates a rectangular path using rect() and then strokes it.
<canvas
id="canvasRect1"
width="200"
height="150"
style="border: 1px solid black;"
></canvas>
<script></script>
In this example, the rect() method defines a rectangle starting at (20, 20) with a width of 100 and a height of 80. The stroke() method then renders the rectangle's outline in blue.
Example 2: Filling a Rectangle Path
This example creates a rectangular path and fills it with a color:
<canvas
id="canvasRect2"
width="200"
height="150"
style="border: 1px solid black;"
></canvas>
<script></script>
Here, the rect() method defines a rectangle starting at (50, 30) with a width of 120 and a height of 90. The fill() method then renders the filled rectangle in green.
Example 3: Multiple Rectangles in a Path
The rect() method can be used to define multiple rectangles within the same path. This allows for more complex shapes that are filled or stroked together.
<canvas
id="canvasRect3"
width="250"
height="200"
style="border: 1px solid black;"
></canvas>
<script>
//<![CDATA[
const canvas_rect3 = document.getElementById("canvasRect3");
const ctx_rect3 = canvas_rect3.getContext("2d");
ctx_rect3.beginPath();
ctx_rect3.rect(20, 20, 50, 50);
ctx_rect3.rect(100, 20, 50, 50);
ctx_rect3.rect(20, 100, 50, 50);
ctx_rect3.rect(100, 100, 50, 50);
ctx_rect3.fillStyle = "red";
ctx_rect3.fill();
ctx_rect3.strokeStyle = "black";
ctx_rect3.stroke();
//]]]]><![CDATA[>
</script>
In this example, four rectangles are added to the same path using rect(). The fill() method fills all the rectangles with red, and stroke() outlines them in black. This demonstrates how you can use rect() to create more complex shapes by combining multiple rectangles in a single path.
Combining rect() with Other Canvas Methods
The true power of rect() shines when used in conjunction with other canvas methods. You can use rect() to create paths that are then modified with other functions like clipping, transformations, and more.
Example 4: Rectangular Clipping Path
This example demonstrates how to use rect() to create a clipping path, showing only the portion of the image within the rectangle.
<canvas
id="canvasRect4"
width="300"
height="200"
style="border: 1px solid black;"
></canvas>
<script>
//<![CDATA[
const canvas_rect4 = document.getElementById('canvasRect4');
const ctx_rect4 = canvas_rect4.getContext('2d');
const image_rect4 = new Image();
image_rect4.src = 'https://dummyimage.com/300x200/000/fff';
image_rect4.onload = function() {
ctx_rect4.beginPath();
ctx_rect4.rect(50, 20, 200, 150);
ctx_rect4.clip();
ctx_rect4.drawImage(image_rect4, 0, 0);
}
//]]]]><







