SVG (Scalable Vector Graphics) is an XML-based format for creating vector graphics in HTML5.
SVG allows you to create resolution-independent graphics directly in your HTML, making it ideal for creating shapes, charts, and interactive visualizations.
In this tutorial, you’ll learn:
- What SVG is and why it’s useful.
- Basic SVG shapes and elements.
- Styling and animating SVGs.
- Combining SVG with JavaScript for interactivity.
- Embedding and using SVG in HTML5.
1. What is SVG?
SVG stands for Scalable Vector Graphics, and its main features are:
- Resolution Independence: SVG images look sharp on any screen size or resolution.
- Lightweight: SVGs are XML-based, making them lightweight compared to raster images like PNG or JPEG.
- Scriptable: SVGs can be styled and animated using CSS and manipulated with JavaScript.
2. Basic SVG Shapes
SVG provides basic shapes such as rectangles, circles, lines, and polygons.
Example 1: Drawing Basic Shapes
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Basic SVG Shapes</title> </head> <body> <h1>Basic SVG Shapes</h1> <svg width="500" height="300" style="border: 1px solid black;"> <!-- Rectangle --> <rect x="50" y="50" width="100" height="50" fill="blue" /> <!-- Circle --> <circle cx="200" cy="75" r="40" fill="red" /> <!-- Line --> <line x1="300" y1="50" x2="400" y2="150" stroke="green" stroke-width="3" /> <!-- Ellipse --> <ellipse cx="100" cy="200" rx="50" ry="30" fill="purple" /> <!-- Polygon --> <polygon points="300,200 350,250 250,250" fill="orange" /> </svg> </body> </html>
Explanation:
- <rect>: Draws a rectangle.
- <circle>: Draws a circle.
- <line>: Draws a straight line.
- <ellipse>: Draws an ellipse.
- <polygon>: Draws a shape with multiple points.
3. Adding Text in SVG
SVG supports text elements using the <text> tag.
Example 2: Adding Text
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SVG Text</title> </head> <body> <h1>SVG Text Example</h1> <svg width="400" height="200" style="border: 1px solid black;"> <!-- Simple Text --> <text x="50" y="50" font-family="Arial" font-size="20" fill="black"> Hello, SVG! </text> <!-- Rotated Text --> <text x="150" y="100" font-family="Arial" font-size="20" fill="blue" transform="rotate(45, 150, 100)"> Rotated Text </text> </svg> </body> </html>
Explanation:
- <text>: Adds text to the SVG canvas.
- x and y: Specify the starting position of the text.
- transform=”rotate(angle, cx, cy)”: Rotates the text by a given angle around a center point.
4. Styling SVG with CSS
SVG elements can be styled using inline attributes or external CSS.
Example 3: Styling SVG with CSS
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SVG with CSS</title> <style> .circle { fill: yellow; stroke: black; stroke-width: 3; } .rectangle { fill: lightblue; stroke: darkblue; stroke-width: 2; } </style> </head> <body> <h1>SVG Styled with CSS</h1> <svg width="300" height="200" style="border: 1px solid black;"> <rect class="rectangle" x="50" y="50" width="100" height="50"></rect> <circle class="circle" cx="200" cy="100" r="40"></circle> </svg> </body> </html>
Explanation:
- You can style SVG elements with CSS classes for reusability.
- CSS properties like fill, stroke, and stroke-width control appearance.
5. Animating SVG
SVG supports animations using the <animate> and <animateTransform> tags.
Example 4: SVG Animation
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>SVG Animation</title> </head> <body> <h1>SVG Animation Example</h1> <svg width="300" height="200" style="border: 1px solid black;"> <!-- Moving Circle --> <circle cx="50" cy="100" r="20" fill="red"> <animate attributeName="cx" from="50" to="250" dur="2s" repeatCount="indefinite" /> </circle> <!-- Rotating Rectangle --> <rect x="100" y="50" width="50" height="50" fill="blue"> <animateTransform attributeName="transform" type="rotate" from="0 125 75" to="360 125 75" dur="2s" repeatCount="indefinite" /> </rect> </svg> </body> </html>
Explanation:
- <animate>: Animates attributes like cx or fill.
- <animateTransform>: Animates transformations like rotation or scaling.
- dur=”2s”: Duration of the animation.
- repeatCount=”indefinite”: Makes the animation repeat infinitely.
6. Responsive SVG
Make your SVG responsive by using viewBox and setting width and height to percentages.
Example 5: Responsive SVG
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Responsive SVG</title> </head> <body> <h1>Responsive SVG Example</h1> <svg viewBox="0 0 400 200" style="width: 100%; height: auto; border: 1px solid black;"> <rect x="50" y="50" width="100" height="50" fill="lightgreen" /> <circle cx="200" cy="100" r="40" fill="orange" /> <line x1="300" y1="50" x2="350" y2="150" stroke="purple" stroke-width="2" /> </svg> </body> </html>
Explanation:
- viewBox=”minX minY width height”: Defines the coordinate system for the SVG.
- style=”width: 100%; height: auto;”: Makes the SVG responsive.
7. Embedding External SVG
You can embed external SVG files using <img> or <object> tags.
Example 6: Embedding External SVG
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Embed External SVG</title> </head> <body> <h1>Embedding External SVG</h1> <!-- Using <img> --> <img src="example.svg" alt="External SVG" width="200"> <!-- Using <object> --> <object type="image/svg+xml" data="example.svg" width="200"></object> </body> </html>
Explanation:
- <img>: Embeds SVG as an image.
- <object>: Allows interaction with the SVG content.
8. Interactive SVG with JavaScript
Add interactivity to SVG elements using JavaScript.
Example 7: Interactive SVG
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Interactive SVG</title> </head> <body> <h1>Interactive SVG Example</h1> <svg width="300" height="200" style="border: 1px solid black;"> <circle id="myCircle" cx="150" cy="100" r="40" fill="blue"></circle> </svg> <script> const circle = document.getElementById("myCircle"); circle.addEventListener("click", () => { circle.setAttribute("fill", "green"); alert("Circle clicked!"); }); </script> </body> </html>
Explanation:
- JavaScript interacts with SVG elements using DOM methods like getElementById.
- Event listeners can trigger actions on user interaction.
Conclusion
In this tutorial, you learned:
- How to create basic shapes in SVG.
- How to style and animate SVG elements.
- How to make SVG responsive.
- How to embed and interact with SVG.
SVG is a powerful tool for creating scalable, interactive, and visually appealing graphics. Experiment with these examples to enhance your web projects