2013-07-06 6 views
25

Ich versuche, eine flüssige SVG Canvas zu haben, die Größe leicht ändern kann. Bisher verwende ich Prozentsätze überall. Es scheint jedoch, dass SVG polygon und path s keine Prozentsätze in point Attribut unterstützen. Hier ein Beispiel:SVG-Polygon-Punkte mit prozentualen Einheiten Unterstützung

(jsFiddle)

<svg width='90%' height='90%' style='background-color: whitesmoke'> 
    <rect x='40%' y='40%' width='25%' height='25%' /> 

    <polygon points="0,0 0,100 30,20 30,0" /> 
    <polygon points="30,0 30,20 60,0 60,0" /> 
    <polygon points="60,0 60,0 90,30 90,0" /> 
</svg> 

Allerdings, wenn ich Zahlen beginnen in points Attribut zu ändern, um Prozentsätze mit Parsing-Fehler in der Konsole schlägt fehl. Ich suche nach einem Weg, das Polygon zu haben, das mit dem <svg> Element die Größe ändern kann.

+0

mögliche Duplikate von [Wie skaliere ich ein SVG-Polygon in ems?] (Http://StackOverflow.com/questions/8515524/how-do-i-scale-an-svg-polygon-in-ems) –

Antwort

40

Durch die Verwendung von viewBox und ein Containerelement (wie auch immer Größe) Ich denke, dass Sie den Effekt erzielen können Sie suchen: http://jsfiddle.net/davegaeddert/WpeH4/

<div id="svg-container" style="width:100%;height:100%;"> 
    <svg width='100%' height='100%' viewBox="0 0 100 100" preserveAspectRatio="none" style='background-color: whitesmoke'> 
     <rect x='40%' y='40%' width='25%' height='25%' /> 

     <polygon points="0,0 0,100 30,20 30,0" /> 
     <polygon points="30,0 30,20 60,0 60,0" /> 
     <polygon points="60,0 60,0 90,30 90,0" /> 
    </svg> 
</div> 

Wenn Sie die viewBox eine Größe von 0 0 100 100 geben, dann können die Punkte wie Prozentsätze geschrieben werden, und die Form wird mit dem sVG-Skala.

+6

Großartig, aber leider wird auch die Größe der Linien (Strichbreite) gestreckt) – FlorianB

+5

@FlorianB - Das Attribut vector-effect = "non "Scaling-Stroke" sollte das auflösen. –

+1

Großartig, aber es hält es als ein Quadrat richtig? Gibt es eine Lösung, wenn Sie Vollbild haben wollen (die meiste Zeit mit einem horizontalen Verhältnis)? –

1

Sie können Gruppe die Elemente zusammen mit g und verwenden Sie eine Transformation:

<svg width='90%' height='90%' style='background-color: whitesmoke'> 
    <rect x='40%' y='40%' width='25%' height='25%' /> 

    <g transform="scale(0.4 0.4)"> 
     <polygon points="0,0 0,100 30,20 30,0"/> 
     <polygon points="30,0 30,20 60,0 60,0"/> 
     <polygon points="60,0 60,0 90,30 90,0"/> 
    </g> 
</svg> 
+0

Das hilft nicht. Am Ende haben Sie eine 90 Pixel breite Polygongruppe auf eine feste Zahl von 45 Pixel skaliert. Was ich brauche, ist, dass sich die Größe mit dem 'svg' Element ändert. Gerade jetzt tut 'rect' das, es hat nichts behoben. Angenommen, ich habe ein Dreieck mit "Polygon", wie soll ich es so verhalten? Versuchen Sie, '' Sie werden bekommen, was ich meine. –

+1

Kannst du nicht eine 'viewBox' verwenden? Es skaliert alles automatisch. – simonzack

+0

OK 'viewBox' irgendwie tut es, ich treffe jetzt etwas wie' d3.js' Bug. Vielen Dank! –

Verwandte Themen