2010-06-25 308 views
112

所以,我有一个HTML格式的SVG文件,我听说过这种格式的一个事情就是它在放大时不会全部像素化。在html中调整SVG大小?

我知道一个JPEG或任何我可以它存储为50乘50图标,然后实际显示为(相当像素)100乘100缩略图(或10乘10),手动设置高度和image_src标签中的宽度。

但是,SVG文件似乎与object/embed标签一起使用,并且更改THOSE的高度或宽度只会导致为照片分配更多空间。

是否有任何方法可以指定您希望显示的SVG图像小于或大于实际存储在文件系统中?

回答

125

用文本编辑器打开.svg文件(这只是XML),并期待这样的事情在顶部:

<svg ... width="50px" height="50px"... 

擦除width和height属性;默认值是100%,所以它应该延伸到容器允许的范围内。

+49

是的,这是正确的,但你也需要添加一个“视框”属性(如视框=“0 0 50 50”在你的50x50px例子),否则内容可能无法正确缩放(将依赖于容器尺寸)。 Scour会自动为你做这件事,http://www.codedread.com/scour/。 – 2010-06-27 12:54:05

+0

Hooray!这有帮助!我已经在文件中有100%的东西,事实证明,但视图框是关键!谢谢你们俩! – Jenny 2010-06-27 15:28:20

+12

如果对其他人不明显,'viewBox'区分大小写。另外,如果您裁剪图像,前两个坐标是左上角,第二个两个坐标是*缩放前的宽度和高度*。 – 2013-10-18 03:42:06

35

尝试这些:

  1. 设置失踪视框,并在设定的高度的高度和宽度值填写,并在SVG标签高度属性

  2. 然后通过简单的缩放图片将高度和宽度设置为所需的百分比值值。祝你好运。

  3. 设置一个固定的宽高比preserveAspectRatio="X200Y200 meet(例如200像素),但它没有必要

例如

<svg 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:cc="http://creativecommons.org/ns#" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:svg="http://www.w3.org/2000/svg" 
    xmlns="http://www.w3.org/2000/svg" 
    xmlns:xlink="http://www.w3.org/1999/xlink" 
    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 
    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 
    width="10%" 
    height="10%" 
    preserveAspectRatio="x200Y200 meet" 
    viewBox="0 0 350 350" 
    id="svg2" 
    version="1.1" 
    inkscape:version="0.48.0 r9654" 
    sodipodi:docname="namesvg.svg"> 
15

可以通过在图像标记和尺寸图像标签即

<img width="200px" src="lion.svg"></img> 
+1

我认为使用的问题在于,您失去了标记的故障转移功能(这可能与版本8及以下版本的IE用户有关)。 – 2012-09-11 03:48:07

6

改变容器的宽度显示SVG调整其大小也修正它,而不是改变源文件的宽度和高度。

.SvgImage img{ width:80%; } 

这修复我再上浆SVG的问题。你可以根据你的要求给出任何%。

3

这是获得使用svg.getBox()界限的例子: https://gist.github.com/john-doherty/2ad94360771902b16f459f590b833d44

在你得到,你可以插入SVG正确设置视框号结束。然后在父div上使用任何css,就完成了。

// get all SVG objects in the DOM 
var svgs = document.getElementsByTagName("svg"); 
var svg = svgs[0], 
    box = svg.getBBox(), // <- get the visual boundary required to view all children 
    viewBox = [box.x, box.y, box.width, box.height].join(" "); 

    // set viewable area based on value above 
    svg.setAttribute("viewBox", viewBox);