使用CSS更改SVG视图框大小

bq3bfh9z  于 5个月前  发布在  其他
关注(0)|答案(9)|浏览(73)

问题:有没有一种方法可以用CSS改变SVG视图框的大小,但保持长宽比?或者有没有另一种方法可以在没有视图框的情况下保持SVG的长宽比。
问题:我想相应地调整SVG的大小,但保持长宽比。视图框的宽度随页面而调整,但高度不随宽度而调整。这样做的问题是容器div的高度取决于视图框的高度。因此,即使视图框的下半部分没有显示任何内容,容器div也可能非常高。
小提琴:http://jsfiddle.net/hT9Jb/1/

<style>
    div{
        width: 100%;
        height: 500px;
        background-color: #00ffff;
    }

    svg{
        width: 50%;
        background-color: #ffff00;
    }
</style>

<div>
    <svg version="1.1" id="Layer_1" x="0px" y="0px" width="250px" height="400px" viewBox="0 0 250 400" enable-background="new 0 0 250 400" aspect-ratio="XminYmin">
        <rect x="0" y="0" fill="#FF0000" width="250" height="400"/>
    </svg>
</div>

字符串
(Object SVG和img SVG对我的目的不起作用。它必须是内联的。解决方案不必是CSS...JavaScript绝对是一个可以接受的解决方案。)

2ul0zpep

2ul0zpep1#

你可以使用transform:

transform: scale(0.75); // 75% of original size

字符串

idv4meu8

idv4meu82#

我还没有找到一种用CSS改变viewBox属性的方法。但是这个JavaScript解决方案很好用:

var mySVG = document.getElementById('svg');
mySVG.setAttribute("viewBox", "0 0 100 100");

字符串
同时从SVG中删除所有对宽度和高度的引用,并在CSS中设置它们。即使你使用SVG,它也是内联的,所以级联规则适用。

jyztefdp

jyztefdp3#

为了拥有一个灵活的SVG,允许您更改其宽度和高度,您需要完全删除宽度和高度,并使用viewbox
而且,与sansSpoon所说的相反,你不需要JavaScript来做这件事。
在你的css中,参考你的svg并定义它的max-widthmax-height,例如:

.my_svg_element {
    max-width: 250px;
    max-height: 400px;

}

字符串
在此之后,您的SVG将是弹性的,同时,将遵守您之前定义的最大宽度和高度。

yws3nbqq

yws3nbqq4#

你试过:

preserveAspectRatio='xMinYMin'

字符串
检查此示例http://jsfiddle.net/hT9Jb/3/
有关详细信息,请参阅mozila documentation about svg

nszi6y05

nszi6y055#

SVG中指定的宽度和高度值是导致问题的原因。
解决方案是修复您的SVG文件。更改:

width="250px" height="400px"

字符串

width="100%" height="100%"


使用CSS:

width: 100%;
height: 100%;

omqzjyyz

omqzjyyz6#

以@Paulo Coghi的答案为基础,这对我来说是最好的答案(在几个小时的失败测试和无用的谷歌搜索后,他救了我:
只需将您的svg转换为:

<svg version="1.1" id="Layer_1" x="0px" y="0px" width="250px" height="400px" viewBox="0 0 250 400" enable-background="new 0 0 250 400" aspect-ratio="XminYmin">
        <rect x="0" y="0" fill="#FF0000" width="250" height="400"/>
</svg>

字符串
转换为:

<svg version="1.1" id="Layer_1" viewBox="0 0 250 400" >
    <rect x="0" y="0" fill="#FF0000" width="250" height="400"/>
    // and/or whatever you want
</svg>


你可以在CSS中使用:

svg {
    max-width: 100%;
    max-height: 100%;
    // or any other units or measurements you want
}

3zwtqj6y

3zwtqj6y7#

svg{
        width: 50%;
        background-color: #000;
    }

个字符
只是使用这个,看看它是否工作(为我工作)。

<svg .... .... ...  preserveAspectRatio="none">


这个应该能用

kr98yfug

kr98yfug8#

在svg的内部标记上使用transform,例如g标记svg g { transform: translate(16px, 16px); }

dgiusagp

dgiusagp9#

我发现了一个简单的JavaScript解决方案:

function setSvgSize(){
    var width = document.getElementById('svg-container').offsetWidth;
    var x = parseInt( $('#svg').attr('width') );
    var y = parseInt( $('#svg').attr('height') );
    var height = (width / x) * y;
    $('#svg-container').css('height',height);
}

字符串

相关问题