SVG Interview Questions
Scalable Vector Graphics (SVG) is an XML-based format for defining two-dimensional vector graphics. It is widely used for creating scalable, resolution-independent images such as icons, logos, illustrations, and interactive graphics on the web.
Primary use cases:
- Web Graphics: Icons, logos, and charts that scale without pixelation.
- Animations: Interactive and animated graphics using CSS or JavaScript.
- Data Visualization: Creating dynamic charts and graphs.
- Responsive Design: Graphics that adapt to different screen sizes.
A basic SVG element is defined using the <svg>
tag, which acts as a container for SVG graphics. It requires attributes like width
, height
, or viewBox
to specify its dimensions.
Example:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="blue" />
</svg>
SVG offers several advantages over raster formats:
- Scalability: SVGs are resolution-independent and scale without quality loss.
- Small File Size: Often smaller than high-resolution raster images.
- Editability: Can be styled and animated with CSS or manipulated with JavaScript.
- Accessibility: Supports text and ARIA attributes for screen readers.
- Compression: SVGs can be compressed using GZIP for faster loading.
The <rect>
element creates a rectangle in SVG. Key attributes include x
, y
(position), width
, height
(size), and optional rx
, ry
(rounded corners).
Example:
<svg width="200" height="100">
<rect x="10" y="10" width="180" height="80" fill="green" stroke="black" stroke-width="2" rx="10" />
</svg>
<circle>
element in SVG, and how is it defined?The <circle>
element draws a circle in SVG. It is defined by attributes cx
(center x-coordinate), cy
(center y-coordinate), and r
(radius).
Example:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
The <line>
element draws a straight line in SVG. Key attributes are x1
, y1
(start point) and x2
, y2
(end point).
Example:
<svg width="100" height="100">
<line x1="10" y1="10" x2="90" y2="90" stroke="black" stroke-width="2" />
</svg>
viewBox
attribute in SVG, and how does it affect rendering?The viewBox
attribute defines the coordinate system and visible area of an SVG. It takes four values: min-x min-y width height
, allowing the SVG to scale and crop content to fit the viewport.
Example:
<svg viewBox="0 0 100 100" width="200" height="200">
<circle cx="50" cy="50" r="40" fill="blue" />
</svg>
d
attribute?The <path>
element draws complex shapes using the d
attribute, which contains a series of commands (e.g., M
for moveto, L
for lineto, C
for curveto).
Example:
<svg width="100" height="100">
<path d="M10 10 L90 10 L50 90 Z" fill="yellow" stroke="black" />
</svg>
Stroke properties style the outline of SVG shapes:
stroke
: Color of the outline (e.g.,black
,#ff0000
).stroke-width
: Thickness of the outline (e.g.,2
).stroke-linecap
: Shape of line ends (butt
,round
,square
).stroke-linejoin
: Shape of corners (miter
,round
,bevel
).stroke-dasharray
: Pattern of dashes (e.g.,5,5
).
Example:
<svg width="100" height="100">
<rect x="10" y="10" width="80" height="80" stroke="blue" stroke-width="3" stroke-linecap="round" stroke-dasharray="5,5" fill="none" />
</svg>
The fill
attribute sets the interior color of SVG shapes. It can be a color, gradient, pattern, or none
for no fill.
Example:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="purple" />
</svg>
The <text>
element adds text to SVG, positioned with x
and y
. Styling attributes include fill
, font-size
, and font-family
.
Example:
<svg width="200" height="100">
<text x="10" y="50" fill="black" font-size="20" font-family="Arial">Hello SVG</text>
</svg>
Gradients in SVG are used to fill shapes with smooth color transitions. They are defined using <linearGradient>
or <radialGradient>
inside a <defs>
element.
Example (Linear Gradient):
<svg width="200" height="100">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" style="stop-color:red;" />
<stop offset="100%" style="stop-color:blue;" />
</linearGradient>
</defs>
<rect x="10" y="10" width="180" height="80" fill="url(#grad1)" />
</svg>
The transform
attribute applies transformations such as scale
, rotate
, and translate
to SVG elements.
Example:
<svg width="200" height="200">
<rect x="10" y="10" width="50" height="50" fill="green" transform="translate(50,50) rotate(45) scale(1.5)" />
</svg>
In SVG paths, coordinates can be:
- Absolute: Specified relative to the SVG’s origin (0,0), using uppercase commands (e.g.,
M
,L
). - Relative: Specified relative to the previous point, using lowercase commands (e.g.,
m
,l
).
Example:
<svg width="100" height="100">
<path d="M10 10 L90 90 m10 10 l-80 -80" stroke="black" fill="none" />
</svg>
The <image>
element embeds external images in SVG, using attributes like href
, x
, y
, width
, and height
.
Example:
<svg width="200" height="200">
<image href="example.png" x="10" y="10" width="180" height="180" />
</svg>
SVG uses two coordinate systems:
- Viewport Coordinate System: Defined by the SVG’s
width
andheight
, representing the visible area. - User Coordinate System: Defined by the
viewBox
, mapping content to the viewport with scaling and translation.
Example:
<svg width="200" height="200" viewBox="0 0 100 100">
<rect x="10" y="10" width="80" height="80" fill="blue" />
</svg>
<g>
element, and what is its purpose?The <g>
element groups SVG elements, allowing shared attributes (e.g., fill
, transform
) to be applied to all children.
Example:
<svg width="200" height="200">
<g fill="blue" transform="translate(50,50)">
<circle cx="0" cy="0" r="30" />
<rect x="40" y="40" width="40" height="40" />
</g>
</svg>
<use>
element in SVG, and how is it used?The <use>
element reuses existing SVG elements defined in <defs>
, referencing them via href
.
Example:
<svg width="200" height="200">
<defs>
<circle id="circ" cx="0" cy="0" r="30" fill="red" />
</defs>
<use href="#circ" x="50" y="50" />
<use href="#circ" x="150" y="150" />
</svg>
SVG elements can be animated using:
- SMIL: SVG’s native animation elements like
<animate>
. - CSS: Keyframes or transitions for properties like
fill
ortransform
. - JavaScript: Manipulating attributes dynamically with libraries like GSAP.
Example (CSS Animation):
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red" style="animation: pulse 2s infinite;" />
</svg>
<style>
@keyframes pulse {
0% { r: 40; }
50% { r: 50; }
100% { r: 40; }
}
</style>
<animate>
element work in SVG animations?The <animate>
element defines SMIL animations, changing an attribute (e.g., fill
, r
) over time using attributes like attributeName
, values
, dur
, and repeatCount
.
Example:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red">
<animate attributeName="r" values="40;50;40" dur="2s" repeatCount="indefinite" />
</circle>
</svg>
SVG elements can be styled using inline CSS (via style
attribute), internal/external CSS (via selectors), or presentation attributes (e.g., fill
).
Example:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" class="my-circle" />
</svg>
<style>
.my-circle {
fill: blue;
stroke: black;
stroke-width: 2;
}
</style>
JavaScript can manipulate SVG attributes, styles, or structure using the DOM API or libraries like D3.js. Common use cases include dynamic updates, animations, and interactivity.
Example:
<svg width="100" height="100">
<circle id="circ" cx="50" cy="50" r="40" fill="red" />
</svg>
<script>
document.getElementById('circ').setAttribute('fill', 'blue');
</script>
preserveAspectRatio
attribute in SVG, and how does it work?The preserveAspectRatio
attribute controls how the SVG’s viewBox
scales within the viewport, with values like xMidYMid meet
or none
.
Example:
<svg width="200" height="100" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid meet">
<circle cx="50" cy="50" r="40" fill="blue" />
</svg>
Best practices for SVG optimization include:
- Minify SVG Code: Remove unnecessary whitespace and comments using tools like SVGO.
- Simplify Paths: Reduce the number of path points.
- Use Relative Coordinates: For shorter path data.
- Remove Metadata: Strip editor-generated metadata.
- GZIP Compression: Serve SVGs with GZIP for smaller transfers.
Example (Minified SVG):
<svg width="100" height="100"><circle cx="50" cy="50" r="40" fill="blue"/></svg>
Who the fuck is using this
ReplyDelete