Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot stretch svg background image, aspect ratio will be preserved

Tags:

css

svg

I am using svg as background image and I want it to be stretched to 100% 100%.

However, it seems like both Chrome and firefox are doing their best to retain the aspect ratio of the svg and instead shrink it in the other width.

Normal size

div
{
    background: url(image.svg) no-repeat;
    background-size: 100% 100%;
    width: 14rem;
    height: 4rem;
}

Normal size

Double width

div
{
    background: url(image.svg) no-repeat;
    background-size: 100% 100%;
    width: 28rem;
    height: 4rem;
}

Double as wide

Double height

div
{
    background: url(image.svg) no-repeat;
    background-size: 100% 100%;
    width: 14rem;
    height: 8rem;
}

Double height

How can I instead have that svg stretched?

svg contents:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<svg version="1.1" id="Lager_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     viewBox="0 0 371.7 102.8" enable-background="new 0 0 371.7 102.8" xml:space="preserve">
<polygon fill="#EF9104" points="370.4,100.5 0,100.5 0,0 269.4,0 "/>
</svg>
like image 450
Anders Lindén Avatar asked Sep 08 '15 09:09

Anders Lindén


People also ask

Can SVG be stretched?

An SVG image with fixed dimensions will be treated just like a raster image of the same size. Note: If you are trying to stretch your SVG to a different aspect ratio with CSS—for example in order to stretch it over the page background—make sure your SVG includes preserveAspectRatio="none" .

Can an SVG be a background image?

SVG images can be used as background-image in CSS as well, just like PNG, JPG, or GIF. All the same awesomeness of SVG comes along for the ride, like flexibility while retaining sharpness. Plus you can do anything a raster graphic can do, like repeat.


2 Answers

You should add

<svg preserveAspectRatio="none">

to your SVG.

MDN Reference Link

<none>

Do not force uniform scaling. Scale the graphic content of the given element non-uniformly if necessary such that the element's bounding box exactly matches the viewport rectangle.

like image 188
Paulie_D Avatar answered Sep 16 '22 19:09

Paulie_D


Appreciate that this is an old question but I was having issues with this so wanted to post some further information in case it helps anyone else...

<svg preserveAspectRatio="none"> this only works when a viewBox attr is provided, for instance: <svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" viewBox="0 0 1920 1152">

"preserveAspectRatio only applies when a value has been provided for viewBox on the same element. For these elements, if attribute viewBox is not provided, then preserveAspectRatio is ignored." https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio

Hope this helps someone else!

like image 22
ceindeg Avatar answered Sep 20 '22 19:09

ceindeg