SVG Zeichenflächengröße

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Es gibt ein paar verschiedene (rationale) Ansätze zur Größenbestimmung von SVG-Zeichenflächen.

Der Begriff "Zeichenfläche" bezieht sich hier auf das Konzept in Illustrator, also im Grunde den weißen Zeichenbereich, den man für das Dokument hat. Letztendlich bezieht er sich auf die viewBox in der tatsächlichen SVG-Ausgabe. Das ist für Frontend-Entwickler sehr wichtig, denn wenn es keine Konsistenz gibt, wird die Positionierung der SVGs immer ein wenig ein Kampf und schadet wirklich der Idee, dass SVG ein nützliches System ist.

Ich habe kürzlich auf einer Konferenz die Entwicklerin Emma Arce getroffen, die von einem sehr interessanten Gespräch in ihrem Team erzählte, als sie versuchten, sich auf etwas zu einigen und dies richtig zu machen. Hier ist meine Sicht auf die Situation.

Ansatz #1: Alle auf exakt gleiche Größe bringen

Wahrscheinlich werden Sie die Größe über CSS anwenden, daher ist die Größe der Zeichenfläche nicht sehr wichtig, aber die Abmessungen sollten identisch sein. So sieht das aus

Vorteile

Relative Größenbestimmung. Sie steuern direkt im Design des Icons selbst, wie es im Vergleich zu anderen Icons dimensioniert wird. Wenn Sie sie später in CSS alle gleich groß machen, behalten alle Icons dieses Größenverhältnis bei und sehen gut zusammen aus.

If the right arrow icon was edge-to-edge, it might be too large in comparison to the tray icon below if sized the same in CSS.

Nachteile

Richtungsbezogene Ausrichtung. Da auf jeder Seite eines beliebigen Icons eine willkürliche Menge an Weißraum vorhanden ist, ist es schwierig, Dinge am Rand eines Icons auszurichten oder einen konsistenten Abstand zwischen einem Icon und einem benachbarten Element zu erwarten.

Depending on which icon is in use, there will be different amounts of space between whatever is adjacent.

Ansatz #2: Auf Ränder zuschneiden

Auch hier spielt die tatsächliche "Größe" der Zeichenfläche keine Rolle, da Sie die Größe wahrscheinlich sowieso über CSS anwenden werden, aber die Zeichenfläche sollte an allen Seiten an den Rand der Grafik stoßen. In Illustrator ist das ein einfacher Schritt

So sieht das aus

Vorteile

Ausrichtung und Positionierung. Wenn Sie ein Icon in der oberen rechten Ecke eines Elements positionieren möchten, wird es dort platziert und sieht gut und ausgerichtet aus. Es wird keinen seltsamen, willkürlichen Weißraum geben, für den Sie kompensieren müssen.

Nachteile

Inkonsistente Größenbestimmung. Alle Icons haben jetzt unterschiedliche Seitenverhältnisse. Das ist kein großes Problem für die Komplexität, da Sie sie immer noch mit CSS mit fester Breite/Höhe skalieren können und sie innerhalb dieses Bereichs zentriert werden (unter der Annahme eines Standardwertes preserveAspectRatio). Das wirkt sich jedoch auf ihre Größenbestimmung aus. Je näher das Seitenverhältnis eines beliebigen Icons einem Quadrat ist, desto größer erscheint es (es füllt den gegebenen Platz aus). Höhere oder breitere Icons müssen verkleinert werden, um in den Platz zu passen, und erscheinen kleiner. Daher ist eine konsistente und relativ zu anderen Icons ausgerichtete Größenbestimmung schwieriger.

Gewinner?

Ich fürchte, ich kann mich einfach nicht für eine entscheiden. Ich mag die Konsistenz der Positionierung von zugeschnittenen Icons wirklich, aber die inkonsistente Größenbestimmung kann mich verrückt machen. Und ich bin sicher, es würde genau umgekehrt funktionieren, wenn ich es ändern würde.

Weitere Überlegungen

Konsistenz durch Rahmen: Wenn Sie in jeder einzelnen Instanz der SVG-Nutzung das Icon innerhalb eines visuell definierten Rahmens platzieren, wird die Ausrichtung zu keinem Problem, da Sie die Rahmen ausrichten können und sie gut aussehen.

Sie können immer Einzelfälle lösen: Nehmen wir an, Sie haben eine wirklich lange und dünne Pfeilform. Sie können immer spezielles CSS nur für dieses eine Element verwenden. Ich würde kein ganzes System aufgrund einer Handvoll von Ausreißern ändern. Hier geht es um das System als Ganzes.