A Practical Guide To SVG And Design Tools — Smashing Magazine

About The Writer

Mikołaj is a designer and front-end developer main a design group at ucreate, a British firm specialised in constructing startups. He’s enthusiastic about …
More about Mikołaj…

To make the most effective of SVG, it’s useful not solely to study its syntax but in addition to know how SVG is generated by graphic design software program. Let’s take a better take a look at the process of generating SVG with widespread design apps and how we will use them to our personal benefit.

A good understanding of SVG is a uncommon talent. Surprisingly typically, SVG is handled as simply one other image format. We use SVG due to its scalability and smaller file measurement, but in reality, SVG is so much more!

In this article, I’ll shed light on three of the preferred design instruments: Adobe Illustrator, Sketch, and Figma. There are also other tools obtainable supporting SVG which will produce other functionalities and implement other solutions.

Notice: If not said in any other case, the content material of this text is referring to SVG 1.1 2nd Edition. A number of the factors discussed under would not apply to SVG 2, nevertheless, it nonetheless hasn’t reached the recommendation status, leaving SVG 1.1 as probably the most up-to-date specification.

Why Hassle About Design Tools?

SVG is an XML-based markup language and, like some other programming language, might be written and edited in a textual content editor. So theoretically, as opposed to JPG or PNG information, we don’t want any GUI software to create SVG. Nevertheless, in a overwhelming majority of instances, utilizing graphic design purposes is inevitable.

Working with difficult shapes and graphics in a text-based format is completely attainable, however often can be very tough and tedious. Subsequently, it’s widespread apply to make use of purposes comparable to Adobe Illustrator, Sketch or Figma to design graphics visually, and then export them to an SVG format.

So regardless of should you’re a designer that codes or a design-conscious developer, an excellent proficiency in working with SVG requires a bit of data from each side: design instruments and the SVG language itself. To higher understand the relation between the 2, let’s take a better take a look at what graphic design apps have to offer and how their options translate to SVG.

Primary Shapes

Many vector graphics are build out of a few primary shapes — grouped, reworked and mixed with each other. The desk under represents what shape tools can be found in Illustrator, Sketch, and Figma and what SVG parts they’re exported as.

IllustratorSketchFigmaGenerated SVG
Ellipse DeviceOvalEllipse or
Rectangle DeviceRectangleRectangle
Rounded Rectangle DeviceRounded
Line Phase SoftwareLineLine (Illustrator and Figma) (Sketch)
Polygon DevicePolygonPolygon (Illustrator and Sketch) (Figma)
Star DeviceStarStar (Illustrator and Sketch) (Figma)

Ellipses And Circles

One of the primary shapes in every design software is an ellipse. In SVG, we’ll find a matching aspect, defined by the coordinates of the ellipse’s centre (cx and cy) and two radii (rx and ry).

This is what an ellipse seems like in SVG:

SVG ellipseSVG ellipse (Giant preview)

The very special sort of ellipse is a circle. A circle is an ellipse with rx and ry radii equal to one another. SVG has its own aspect that takes one attribute less as there’s only one radius to be taken under consideration:

SVG circleSVG circle (Giant preview)

In case of ellipses and circles, all design instruments work the identical: Ellipse Software in Illustrator, Oval software in Sketch and Ellipse device in Figma will all generate aspect until the radii are equal: in such instances we’ll end up with a component.

Rectangles And Rounded Rectangles

Another primary form widespread to all design tools is a rectangle. In case of all design instruments, using a rectangle device generates a aspect in SVG. A primary is defined by four attributes: its x and y coordinates, together with its width and peak:

SVG rectangleSVG rectangle (Giant preview)

Discover that while ’s and ’s position is defined by their geometrical centers, the position of a is defined by the coordinates of its prime left corner.

Aside from primary rectangles, we frequently use rectangles with rounded corners. In all three design tools, you possibly can turn a rectangle into a rounded rectangle by making use of a border radius to it in the Inspector or the Properties panel.

Additionally, in Sketch and Illustrator, there are instruments devoted to creating rounded rectangles (Rounded Rectangle Device in Illustrator and Rounded software in Sketch). Nevertheless, there’s no difference between a daily rectangle with a radius utilized and a rounded rectangle drawn with a Rounded Rectangle device.

Subsequently, regardless of how created, a rounded rectangle shall be exported using the following syntax:

On this case, rx is an attribute chargeable for the radius of the rounded corners:

SVG rounded rectangleSVG rounded rectangle (Giant preview)

Rounded Rectangles With Elliptical Corners

One vital difference between design tools and SVG is how radii are defined. In all the design instruments we think about, border radius is defined by a single variable. We will think of border radii as little circles used to mask the corners of our rectangles:

Rounded nook in SVGRounded nook in SVG (Giant preview)

In the meantime, in SVG border radii could be outlined by two attributes: rx (as in the example above) and ry. They allow us to create rectangles with elliptical corners. You’ll be able to consider such rounded corners as ellipses used as masks as an alternative of circles:

Elliptical corner in SVGElliptical nook in SVG (Giant preview)

So, in this case, SVG gives you extra prospects than design instruments.

Notice: Despite the fact that it’s not precisely associated to the subject of this article, it’s value noting that the difference described above applies to both SVG and HTML/CSS. The CSS property border-radius that is used to type nodes corresponding to divs and spans also permits creating elliptical corners. You’ll be able to see an example under.

border-radius: 10px 5% / 20px 25em 30px 35em;

Values earlier than the slash (/) are horizontal radii (equal of rx) and values after the slash are vertical values (equal of ry).

Rounded Rectangles With Multiple Radii

In design tools, the same as in CSS, every of the corners of a rectangle might be controlled separately. In other words, every corner can have its personal radius (or no radius altogether). Such operation shouldn’t be attainable on a aspect in SVG. Each aspect has only one rx and one ry attribute. When you create a rectangle with multiple radii applied to its corners, the design device will generate a component as an alternative of a factor. We’ll speak extra of a factor in the subsequent section.

Clean Corners

One of the fascinating features introduced by Sketch and Figma not that way back is clean corners. Briefly, clean corners use an irregular border-radius to realize a end result that appears extra pure and, nicely, clean. The most typical software of clean corners is app icons and different rounded parts on iOS. Apple used “regular” rounded corners on its cellular platform till iOS6 after which switched to what we call at present “smooth” corners as a part of the large redesign launched in 2013 (iOS7).

Difference between rounded and clean cornersDistinction between rounded and clean corners (Giant preview)

In Sketch, you’ll be able to achieve clean corners impact by switching between Spherical Corners and Clean Corners in Inspector. Figma is supplying you with much more control over your corners as you’ll be able to manipulate with the level of smoothness within the Corner Smoothing menu.

Sadly, none of these may be easily translated to SVG as SVG doesn’t know the idea of clean corners in any respect. There’s additionally an essential difference between what Sketch and Figma do in case you attempt to export a rectangle with clean corners to SVG.

Figma ignores the graceful corners, and exports a rectangle as a daily factor with rounded corners. Sketch, then again, exports a rectangle with clean corners as a that’s making an attempt to duplicate the true form of clean corners. So Figma provides us worse accuracy for the sake of holding a rectangle a rectangle, while Sketch is aiming at most potential accuracy at the cost of semantics and larger file measurement. For those who’d like to know better what does this difference imply, we’ll dig deeper into the pros and cons of preserving primary shapes a bit later.


The subsequent primary sort of factor is a line. In this case, we check with a line as a single straight line going from level A to point B.
Illustrator, Sketch and Figma all supply their own line tools dedicated to drawing strains.
In SVG, we now have a component. 4 of its attributes are required: the coordinates of its start line and the coordinates of its finish level:

SVG lineSVG line (Giant preview)

In terms of exporting, Illustrator and Figma will export strains as parts the place attainable, while Sketch will all the time compute strains to parts.


Now let’s take a look at polylines. Polyline is a related collection of straight strains. Polylines don’t have dedicated tools within the design tools. They can be drawn with a Pen device (in Illustrator and Figma) or with a Vector software (in Sketch).

In, SVG, polylines are defined with a aspect. is drawn using a factors attribute which is an inventory of coordinates defining all of the points that create a polyline. Let’s take a look at an example of a polyline made out of three segments and 4 factors:

polyline(Giant preview)

Illustrator and Sketch translate polylines to parts, whilst Figma exports polylines as s.


In all three instruments, you possibly can control the ends of the strains to show them into arrows and such. And all three tools will export such strains as s, even when with out the caps applied the identical shapes can be translated to s or s. Is it because SVG doesn’t help arrows? Not exactly.

Truly, SVG specification does embrace customizable line ends which are generally known as markers. Nevertheless, none of the design tools we talked about use markers in the SVG they generate.

is a separate SVG factor that may be defined inside SVG’s and then used on , and parts with marker attributes: marker, marker-start, marker-mid and marker-end. For those who’d wish to study more about these attributes, I might advocate you to take a look at the official W3C documentation.

Polygons And Stars

The last primary shape we’ll check out it’s a polygon. Polygon is a closed shape product of straight strains, e.g. star or a hexagon. You can even think of it as of a closed polyline. The syntax of a factor in SVG is actually the same as of a . The only difference between the two is that within the the final point on the record is all the time being related with the first level to make a a closed form.

SVG polygonSVG polygon (Giant preview)

Some polygons are common polygons. What’s special about common polygons is that each one of their sides and angles are equal. To draw regular polygons, comparable to a hexagon or a pentagon, you need to use a Polygon device, similar in Illustrator, Sketch and Figma. Polygon instruments in Illustrator and Sketch will generate parts in SVG. In Figma, however, all shapes made with a Polygon software end in parts.

All three design tools even have devoted Star tools to draw stars. Nevertheless, relating to export, shapes created with Star instruments behave exactly the identical as these created with Polygon tools. In SVG, stars are simply polygons, there’s NO ~~~~ factor.

It’s essential to keep in mind that Star and Polygon tools are used to create regular stars and polygons, while the component in SVG can be utilized for any polygon, regular or irregular.

All Roads Lead To

As we already discovered, in SVG, there are three primary shapes devoted to drawing shapes made out of straight strains: , and . But what if we’d like our strains to be curved? It’s a high time we spoke concerning the factor.

The Factor

is probably the most versatile SVG factor. It can be used to draw any attainable line and form, including, but not limited to, all the essential shapes listed above. Actually, each primary form (, , , , , ) may be described as a factor. What’s more, there are numerous shapes that may be created with however are usually not potential to create with some other SVG factor. To study more about and its syntax, I might advocate you to check out this wonderful article by Chris Coyier.

Now, how can we create parts in design tools? To begin with, as we discovered above, a few of the layers created with form tools compute to parts although they theoretically might be other parts (e.g. Figma exports all polygons as s despite the fact that they might have been defined as s. Then, each different irregular shape we draw with a Pen software or a Vector device have to be exported as as there’s no other SVG factor that would define them. Finally, in Sketch and Figma, we will convert any primary form into a layer that computes to a . In Sketch, we will accomplish this by choosing Layer > Mix > Flatten, whereas is Figma we will find this perform underneath Object > Flatten Choice (⌘ + E on macOS, Ctrl + E on Windows).

Boolean Operations

Boolean operations are features carried out on shapes to combine them in a number of alternative ways. In Illustrator, Sketch and Figma, there are 4 commonplace boolean operations:

  • Union (Unite)
    A sum of the shapes
  • Subtract (Minus front)
    Backside shape subtracted by the widespread area between the shapes
  • Intersect
    The widespread space between the shapes
  • Difference (Exclude)
    A sum of the shapes subtracted by the widespread area between the shapes.

In Illustrator, all of these features generate a single shape (define). It is an motion that can’t be reversed — otherwise than using Undo (⌘ + Z on macOS, Ctrl + Z on Home windows). In Sketch and Figma, however, boolean operations create layer teams that may be ungrouped afterward without any hurt brought about to the shapes inside. Nevertheless, you’ll be able to merge these groups right into a single shape to realize an analogous end result as in Illustrator utilizing Flatten features mentioned within the previous paragraph.

The question is, does SVG help boolean operations? No, it doesn’t. They only get merged. Subsequently, every combined form you create with boolean operations in Figma or Sketch can be exported as a single factor.

It Appears The Similar, So Why Does It Matter?

When it comes to how totally different shapes could be outlined in SVG, its syntax is extremely versatile. Let’s contemplate a primary rectangle:

Nothing greater than a rectangleNothing more than a rectangle (Giant preview)

Such a shape might be outlined in SVG in a couple of alternative ways. It can be a aspect, a factor. It undoubtedly could be a component (as every thing could be a factor). It may also be a aspect (or a component) if we determine to create it using strokes as an alternative of fills.

Every of these parts renders a rectangle that looks precisely the identical:

pathe.g. or

However, if the ultimate end result (the graphic rendered by a consumer agent in a browser) appears the identical, does it really matter what strategy can we choose? Nicely, it does. As a rule of a thumb, I might all the time advocate utilizing primary shapes the place potential.

Last however not least, use the most obvious shapes for the given case. For instance, don’t create rectangles with strains or circles with rectangles in the event you don’t have an excellent cause. There are no less than a number of arguments behind that:

  1. Semantics/Readability
    Compression tools, reminiscent of SVGO, offer you an option to compute all the essential shapes to path parts. It might save you a number of bites however will certainly lower the readability of your code. syntax is extraordinarily unintuitive, so if your SVG is ever about to be modified in a code editor relatively than a design device, will probably be a lot easier to know it in the event you maintain the essential shapes as primary shapes.
  2. File Measurement
    Compressing shapes to paths might provide help to minify information however it’s not all the time the case! For example, a rounded rectangle takes rather more area as a than as a .
  3. Animations
    Have you ever ever tried to animate SVG? It’s numerous fun — so long as you operate on clear, semantic SVG. With primary shapes, you possibly can simply manipulate such parameters as radius, width, peak or position of the point. When you merge your shapes into paths, most of these operations will probably be a lot more durable to realize or just inconceivable.
  4. Variants/Responsiveness
    Keep in mind that SVG just isn’t a static image akin to JPG. You’ll be able to type it, theme it, make it responsive, and so forth. Similar as with animations, protecting your file well-structured and semantic will certainly assist you with any of those tasks.

As with each rule, yow will discover some exceptions. But, on a basic foundation, it’s good follow to keep your SVG as readable, flexible and structured as potential.

Now, let’s check out other attributes and options resembling viewBox, teams, transforms and visual results.

width, peak and viewBox

If you already have some experience with SVG, you in all probability observed that the opening tag typically has the following attributes: width, peak and viewBox. In design instruments, we’ve got dimensions of artboards (or frames in case of Figma). So how precisely these values are related to one another?

Let’s start with explaining the attributes we just talked about. You possibly can think of a viewBox as of a digital canvas in the type of a coordinate system. The centre of this coordinate system is placed in the prime left nook of the designated area. All gadgets inside the tag are placed in accordance with this coordinate system and in addition clipped by it — something that overflows the viewBox gained’t be rendered. viewBox accepts four numbers as its worth:

viewBox mannequin in SVGviewBox mannequin in SVG (Giant preview)

As SVG stands for Scalable Vector Graphics, no models are needed on these numbers. Simply imagine it as an abstract coordinate system that may be scaled up and right down to any measurement. Don’t worry an excessive amount of concerning the first two numbers, almost definitely you gained’t want them. The latter two are what often matters. These are the precise dimensions of our SVG canvas.

viewBox doesn’t determine SVG’s measurement. It simply specifies the coordinates of the world by which our SVG is drawn. Subsequently, when used on the internet, with a specified viewBox will all the time take all of the out there area and protect the ratio set by the viewBox — until we forestall this with CSS or set the width and/or peak attributes.

width and peak are the attributes that set the actual width and peak of the SVG component. Quite the opposite to viewBox, they need to use specified models resembling pixels, ems or rems. Because of this we will also rework the SVG with them — if the ratio between the width and peak is totally different than the ratio between the values of the viewBox, SVG will skew the graphic specified inside the viewBox in accordance with the width and peak values:

viewBox’s facet ratio is 3:2 but its width and peak attributes make it show as a sq.viewBox’s facet ratio is 3:2 but its width and peak attributes make it show as a square. (Giant preview)

Now, what occurs once we export SVG from design tools? In Sketch and Figma, all belongings (regardless of if they’re single layers, groups or artboards) will all the time get a viewBox equal to the size of the exported component and width and peak set in pixels, equal to the final two values of the viewBox. In Illustrator, all belongings have a viewBox, specified the identical method as in Sketch and Figma, however no width and peak applied.


Groups are the essential imply of organizing layers in design instruments. Aside from setting hierarchy, groups are used to apply bulk operations, comparable to transforms, to multiple parts. There’s no vital difference in how teams work across Illustrator, Sketch and Figma and, fortuitously, the essential performance of SVG teams () is just about the same.


In SVG, there are 5 primary transforms that we will apply to a component:

  1. translate: strikes the aspect alongside the vertical and/or horizontal axis;
  2. scale: scales the component alongside the vertical and/or horizontal axis:
  3. rotate: creates a two-dimensional rotation by a given angle laid out in levels round a given point;
  4. skew (skewX or skewY): skews the component by a given angle specified in degrees alongside the vertical or horizontal axis;
  5. matrix: probably the most complicated and versatile of obtainable rework features. As it might require various algebra speak to elucidate how matrix transformations work, it goes far past the scope of this text. Let’s just acknowledge that matrix lets you perform many difficult transforms resembling stretching, squeezing, shearing, and so forth.

Observe: Discover that although a few of the SVG transforms look very similar to CSS transforms, they don’t seem to be the same. For instance, CSS gives both 2D and 3D rotation features whereas SVG has only one 2D rotate perform. Also, whereas CSS accepts numerous angle models reminiscent of levels or radians, SVG rotations are all the time set in levels, subsequently a unit might be omitted (e.g. rotate(45), NOT ~~rotate(45deg)~~).

All of those transforms could be utilized to any SVG aspect, similar to shapes or groups, and are non-destructive, i.e. don’t affect the original geometry of the component. We apply transforms by way of a rework attribute:

Let’s take a look at the design tools now! So, a lot of the transforms we apply in design instruments interact immediately with the objects’ geometry and their position on the canvas. They don’t seem to be unbiased from the shapes and won’t be exported as SVG rework features.

Rotations are here the exception, with their values being saved in the Inspector separately from the component’s geometry they usually do export as a rework=”rotate(…)” perform.

Apparently, the same rule applies to flips (reflections) in Sketch and Figma (not in Illustrator!). Each of them has its own strategy although. Sketch makes use of a mixture of unfavourable scaling and translating to realize a flip impact, whereas Figma performs a flip within a single matrix perform.

Border Radius

We already spoke about rounded rectangles but what about rounding other shapes? In reality, in all the designs instruments we talk about, you possibly can round the corners of any form, not only a rectangle.

But what about SVG? Do and parts even have a rx and ry attributes? Unfortunately, no. Any form aside from a rectangle, when you round any of its corners, will all the time be exported as a component treating the rounded corners as an integral part of the form’s geometry.

Fills And Strokes

Illustrator, Sketch and Figma all help fills and strokes as the essential properties of any shapes, and so it occurs in SVG. Subsequently, fills laid out in design tools are exported inside a fill attribute and stokes are exported inside a stroke attribute. Don’t assume it’s all that easy though. The satan is within the particulars.

Colour Fill

Colour fill is probably the most primary of obtainable fills and is specified with a single plain shade (e.g. #3fd8e2). In SVG, this worth is put immediately in the fill attribute (e.g. fill=”#3fd8e2″).

Design tools export colour fills with hex values (e.g. #0000ff), although, in SVG, you can even use all the opposite naming schemes recognized to CSS, similar to colour names (e.g. blue), RGB values (e.g. rgb(0,zero,255)) or even HSL values (e.g. hsl(240,100%,50%)).

Fill Opacity

With regards to fill opacity, SVG accepts semi-transparent colours (e.g. RGBA values), though it also supplies a fill-opacity attribute. Because of compatibility points, using fill-opacity is a really helpful strategy and it’s also the one used by Figma and Sketch. (I’m not mentioning Illustrator right here, as Illustrator does not help you control fill opacity.) So, if you want to create an SVG sq. full of half-transparent purple colour, you are able to do the next:

however a extra really helpful strategy (utilized by Sketch and Figma) can be:

Gradient Fill

In the event you’re acquainted with CSS, you could know that relating to backgrounds, switching between colour and gradient backgrounds is comparatively simple. The identical background-color (or background) property can be used in both instances. As gradients in SVG are much older than CSS gradients, their syntax can also be quite totally different.

To use a gradient is SVG, you first have to outline it inside the tags after which check with it in a fill attribute, e.g.:

So, what happens throughout SVG export whenever you use a gradient fill is that a gradient is added to the and it’s being referenced in the code under.

An essential factor to recollect is that that SVG supports only linear and radial gradients. Results reminiscent of angular gradient or gradient mesh gained’t be exported to SVG.

Pattern/Picture Fill

Sketch and Figma also supply an Picture fill the place a raster graphic is used both to fill the complete aspect or as a repeating pattern.

On the subject of exporting Image fills to SVG, it’s truly fairly just like gradients. Photographs are being defined in the with a factor and then referenced inside a fill attribute:

To make it work, the referenced #picture picture have to be defined somewhere. The design tools will embed them instantly in SVG as parts, although it’s not a beneficial strategy relating to performance. If you actually need to use raster pictures in your SVG, I might recommend to take away the image tag from the SVG and use it a standalone file as an alternative:


stroke attribute in SVG, similar as fill attribute accepts colours in numerous formats, e.g. hex, RGB or HSL. And equally to fill, you possibly can management stroke’s opacity with stroke-opacity. Also, similar as with fill, strokes can use gradients as their worth. All of these effects may be achieved in design instruments and successfully exported to SVG.

Stroke Caps And Joins

There are additionally a number of stroke specific attributes though. First, you’ll be able to control the stroke width. Design tools help it and its exported as stroke-width attribute. It’s also possible to management ends and joins of the strokes. SVG permits you to define them by way of stroke-linecap and stroke-linejoin attributes. There are three attainable caps: butt cap, round cap and square cap, and three attainable joins: miter be a part of, round be a part of and bevel be a part of. Both caps and joins could be controlled in Illustrator, Figma and Sketch and out there caps and joins are matching these out there in SVG.

Dashed And Dotted Strokes

One other impact we will achieve with strokes is dashed strokes. In Illustrator and Figma, you possibly can set a number of dashes and gaps, whereas in Sketch, solely a single sequence of a touch and a niche is feasible.

SVG lets you create dashed strains with a stroke-dasharray attribute. stroke-dasharray permits a sequence of multiple dashes and gaps to be handed as its worth which matches Figma’s and Illustrator’s features. It additionally means Sketch doesn’t can help you use the complete prospects of SVG on this case.

An fascinating edge case is a dotted line. We achieve it by setting the stroke-linecap to spherical and a touch’s size to zero, e.g.:

Observe: At present, Figma users experience a bug that doesn’t permit them to create dotted strains. For example, utilizing 0, 10 or 10, zero as Dashes is interpreted the identical method as 10, 10 and provides a daily dashed line relatively than a dotted line. Luckily, there’s a method to get round it. Quite than using zero, use a very small value, e.g. 0.0001, 10 — this should end in completely dotted line, as anticipated.

Stroke Alignment

There’s one other, rather more vital difference between design tools and SVG: stroke alignment. Illustrator, Sketch and Figma all assist you to control the alignment of the stroke and set it inside, outdoors or centre-align it. However guess what? SVG 1.1 does not help stroke alignment. In SVG, all strokes are centre-aligned strokes. No inside strokes or outdoors strokes. Which is why some very weird things happen once you’re exporting your outside- and inside- aligned strokes to SVG.

Illustrator, in such case, exports the shape and its stroke as two separate shapes. So in case you apply an inside stroke or an outdoor stroke to a rectangle in Illustrator, in SVG it should end in a rectangle and a separate factor representing the rectangle’s stroke, e.g.:

This conduct has some essential repercussions. For instance, you possibly can not change the width of the stroke or make it dashed. It also gained’t scale the same method as “real” strokes. What’s extra, Illustrator modifications the size of the unique form, e.g. a 100×100 square with a 20-units bold internal stroke will truly export as a 120×120 sq. to avoid rendering issues. Ultimately, it’s just not a stroke. It’s simply another shape with a fill.

Figma and Sketch have a unique strategy although. They faithfully export all strokes as strokes however they recalculate the size of the shape. So when you’ve got a circle with a radius equal to five and an inside stroke equal to 2, what you’ll discover in your SVG will probably be a circle with a radius equal to 4 (and a stroke nonetheless equal to 2).

This strategy permits Figma and Sketch to keep away from a lot of the points talked about within the case of Illustrator. Nevertheless, with some more difficult shapes this system might end up to not be exact and the ultimate outcome to be a bit totally different than expected. With is why Sketch’s and Figma’s strategy is just not necessarily better — it’s undoubtedly more semantic, performant and versatile, however Illustrator’s answer is extra correct.

Notice: The identical drawback with stroke alignment applies to CSS as nicely. The CSS border property does not help inside or outdoors alignment neither. Nevertheless, if you need, you’ll be able to hack this conduct with outline and box-shadow properties.

A number of Fills And Strokes

In design tools, you possibly can add multiple fills and strokes per layer. This makes plenty of sense as soon as mixed with such attributes as opacity and blend modes. Sadly, SVG does not help such a function. In the event you export a layer that has fills and/or strokes, it can get multiplied and every of the strokes and fills applied to its personal layer.

Shadows, Filters, And Different Results

Let’s speak about some much less well-liked effects now. SVG is a very highly effective language, in reality rather more highly effective than how it’s often used on the internet. One of the crucial fascinating SVG’s options is a wide range of superior visible results, referred to as SVG filters.

The complete scope of SVG filter’s prospects is way too large to be described in this article. In case you’d wish to study extra about them I strongly advocate you to take a look at some talks and articles on this matter by Sarah Soueidan.

Filters, similar as patterns or gradients, have to be defined to apply them later to a layer. Every filter is outlined as a factor that can include quite a few results, generally known as filter primitives, every standing for a separate visible impact.

Filter primitives may be mixed collectively to create filters. For instance, this is what a primary blur impact utilized to a rectangle seems like:

…but you can even create a more complicated filter that consists of multiple filter primitive:

Out of the three design tools we talk about, only Illustrator permits you to play with SVG filters. Yow will discover them in the app’s menu, underneath Effect > SVG Filters. Sketch and Figma are a totally totally different story. Any results these purposes supply are principally targeted on CSS and native implementations, e.g. Background Blur impact was carried out primarily for designing iOS apps and Drop/Inside Shadow effects parameters are matching CSS properties (box-shadow and text-shadow).

It doesn’t imply we will’t export these effects to SVG. We will. Nevertheless, translating these effects to SVG is completely not as simple as to CSS. Let’s think about a square with a drop shadow applied.

A rectangle with a shadowA rectangle with a shadow (Giant preview)

That is how our sq. might seem like, as soon as exported to HTML/CSS:

A comparable square exported from Sketch to SVG provides us a considerably extra complicated piece of code:

What occurs right here is that Sketch duplicates the sq., so we now have two similar squares, one above one other, and turns the duplicate into a shadow.

To accomplish this, it applies a filter to a duplicated square that consists of three totally different filter primitives:

  • one to offset the sq.;
  • one to set its colour to semi-transparent black;
  • one to blur it.

In other design tools, we might encounter an analogous state of affairs.

It doesn’t imply that we should always never, by all means, use shadows in SVG. It’s useful to remember although that as long as SVG provides you a very highly effective toolkit to switch your graphics, some seemingly simple results are usually not that straightforward to realize in any respect.

Blend Modes

Mix modes (corresponding to Darken, Multiply or Overlay) permit blending two or extra parts by combining their values in several methods. Well-known to graphic designers (and purposes similar to Adobe Photoshop), mix modes work in Sketch, Figma and Illustrator as properly.

In SVG, blend modes exist as one of many filters. They’ve their own filter primitive. Nevertheless, as ’s syntax is pretty difficult, Sketch, Figma and Illustrator use CSS as an alternative:

mix-blend-mode: overlay;

With mix-blend-mode browser help being fairly good nowadays, it shouldn’t be an enormous challenge. Nevertheless, if it’s necessary so that you can guarantee bulletproof browser help that includes Microsoft Edge and IE, you’ll have to substitute the CSS blend modes with SVG filters manually.

Similar as with a number of fills and strokes, SVG doesn’t help mix modes utilized instantly on fill and stroke attributes (quite than on entire layers). For those who attempt to export fill and strokes with their own blend modes from a design device to SVG, the layer will get multiplied and the mix modes applied to respective copies of the layer.

Symbols And Elements

In a few of the code examples above, you could have observed an element we haven’t discussed yet: a factor. lets us outline and reuse parts in SVG, a bit just like Symbols in Illustrator and Sketch or Elements in Figma. Keep in mind defining patterns, gradients and filters inside the tags to allow them to be utilized in some other a part of your SVG code? In reality, any SVG component could be defined and reused this manner. When you defined a form or a gaggle, you’ll be able to confer with it in the rest of the doc as many occasions as you like, e.g.:

You may also reuse far more complicated buildings utilizing a tag. Symbol acts as a separate body inside our SVG and may have its own viewBox attribute (see Width, peak and viewBox for reference).

Does it mean our design tools’ symbols and elements will probably be exported to SVG symbols? In Illustrator — yes, it does. In Sketch and Figma — no, it doesn’t. Why? Primarily, because Illustrator symbols are pretty simple and could be easily translated to SVG whereas Sketch’s symbols and Figma’s elements aren’t that straightforward in any respect and exporting some of its options (resembling nested overrides) can be very tough or even inconceivable.

Textual content

It wouldn’t be a comprehensive guide if we don’t point out typography. All the design tools supply all kinds of tools associated to text. SVG, although often used for graphics, supports textual content parts too.

Illustrator, Sketch and Figma all help exporting text to SVG and computes textual content layers into parts in SVG. SVG textual content parts are rendered like some other graphic parts, shapes and so forth. with the one distinction is that they’re text.

Similar as in CSS, we will management all the essential textual content’s parameters, corresponding to weight, line peak or alignment. In reality, if you understand how to fashion textual content in CSS, you already know methods to do it in SVG. Nevertheless, it might really feel a bit old-school. Firstly, all the parameters have to be set in inline attributes, equally to the golden requirements of HTML three.2. Secondly, there are not any shorthands. For instance, you gained’t find anything resembling a font CSS property. That’s because SVG textual content attributes are actually based mostly on CSS 2 spec which takes us back to the 90ties and are method older than CSS we all know at the moment.

Nonetheless, all of these attributes are being exported from the design tools completely nicely every time we would like some textual content layer to grow to be SVG code.

Customized Fonts

Sadly, issues get a bit tough with regards to custom fonts. Again in the days, when SVG 1 commonplace was being created, customized typefaces weren’t a standard thing to the online. Everyone used normal fonts, similar to Tahoma, Verdana or Courier. Going fancy and using fonts individuals didn’t have on their machines by default, often meant rasterizing them ruthlessly and using them as photographs. Nevertheless, SVG carried out its personal fonts format, named SVG fonts. Immediately, 18 years after the SVG 1.0 was revealed, SVG fonts are not supported in a lot of the major browsers.

Fortunately for us, SVG performs very properly with CSS, which suggests we will use net fonts as an alternative of SVG fonts, e.g.:


Let me not get into element of implementing net fonts here aside from one crucial notice: don’t overlook about it. In other words, when you use customized fonts in your SVG, you have to keep in mind about providing these fonts to the shopper, the identical as in HTML/CSS.

Outlining Fonts

One might argue that a lot easier than warring about fonts and all, can be to outline all the text layers and don’t worry about them ever after. Nonetheless, there are at the least a number of good causes to not change your textual content to shapes:

  1. You possibly can’t edit outlined text — earlier than nor after export.
    Working with outlined textual content, you want to keep in mind about protecting an editable copy in your Illustrator, Sketch or Figma file always. Otherwise, you gained’t have the ability to edit your textual content layers, as soon as they’re outlined. This adds pointless complexity to the process. Not to point out modifying the outlined text after the SVG was exported. Textual content in SVG may be updated at any time. Outlined textual content requires opening the source file every time you need to make the tiniest copy change.
  2. Outlined text just isn’t accessible.
    Text in SVG, similar as other textual content parts on the internet, might be read by display readers and different accessible applied sciences. By outlining text layers, you forestall individuals from using such applied sciences from accessing your content.
  3. Individuals anticipate text to be text.
    Most individuals utilizing the online know absolutely nothing about SVG, HTML or design instruments. If they see textual content, they anticipate it to be simply that. They could need to select it, copy it or put in a search engine. All of this is attainable with text in SVG — until you outline it.
  4. Don’t overlook about web optimization.
    Textual content in SVG can also be accessible and utilized by search engines like google. By outlining text, you make your content less searchable and probably less seen to the general public.


Thank you numerous for going with me on a journey by way of the ins and outs of working with SVG and design instruments. This text undoubtedly does not cover the complete spectrum of the topic, although it ought to be enough to cope with the most typical use instances. In case you have any questions or queries relating to the things that haven’t been talked about right here, don’t hesitate to submit them in the feedback!

Smashing Editorial(dm, yk, il)