preserveAspectRatio

Das preserveAspectRatio-Attribut gibt an, wie ein Element mit einem bestehenden Seitenverhältnis in einen Viewport mit einem anderen Seitenverhältnis passen muss.

Das Seitenverhältnis eines SVG-Bildes wird durch das viewBox-Attribut definiert. Daraus folgt, dass preserveAspectRatio keine Auswirkung auf die Skalierung von SVG hat, wenn viewBox nicht gesetzt ist (außer im Fall des <image>-Elements, bei dem sich preserveAspectRatio wie unten beschrieben anders verhält).

Syntax

preserveAspectRatio="<align> [<meet or slice>]"

Der Wert des preserveAspectRatio-Attributs besteht aus bis zu zwei Schlüsselwörtern: einem erforderlichen Ausrichtungswert und einem optionalen meet- oder slice-Schlüsselwort.

Der Ausrichtungswert gibt an, ob eine gleichmäßige Skalierung erzwungen werden soll und, wenn ja, welche Methode zur Ausrichtung verwendet werden soll, falls das Seitenverhältnis des viewBox nicht mit dem des Viewports übereinstimmt. xMidYMid ist der Standardwert. Der Ausrichtungswert muss einer der folgenden Schlüsselwortwerte sein:

none

Erzwingt keine gleichmäßige Skalierung. Skalieren Sie den grafischen Inhalt des gegebenen Elements bei Bedarf ungleichmäßig, sodass der Begrenzungsrahmen des Elements genau dem Viewport-Rechteck entspricht. Beachten Sie, dass wenn <align> auf none gesetzt ist, der optionale <meetOrSlice>-Wert ignoriert wird.

xMinYMin

Erzwingt gleichmäßige Skalierung. Richten Sie das <min-x> des viewBox-Elements mit dem kleinsten X-Wert des Viewports aus. Richten Sie das <min-y> des viewBox-Elements mit dem kleinsten Y-Wert des Viewports aus.

xMidYMin

Erzwingt gleichmäßige Skalierung. Richten Sie den mittleren X-Wert des viewBox-Elements mit dem mittleren X-Wert des Viewports aus. Richten Sie das <min-y> des viewBox-Elements mit dem kleinsten Y-Wert des Viewports aus.

xMaxYMin

Erzwingt gleichmäßige Skalierung. Richten Sie das <min-x>+<width> des viewBox-Elements mit dem maximalen X-Wert des Viewports aus. Richten Sie das <min-y> des viewBox-Elements mit dem kleinsten Y-Wert des Viewports aus.

xMinYMid

Erzwingt gleichmäßige Skalierung. Richten Sie das <min-x> des viewBox-Elements mit dem kleinsten X-Wert des Viewports aus. Richten Sie den mittleren Y-Wert des viewBox-Elements mit dem mittleren Y-Wert des Viewports aus.

xMidYMid

Erzwingt gleichmäßige Skalierung. Richten Sie den mittleren X-Wert des viewBox-Elements mit dem mittleren X-Wert des Viewports aus. Richten Sie den mittleren Y-Wert des viewBox-Elements mit dem mittleren Y-Wert des Viewports aus. Dies ist der Standardwert.

xMaxYMid

Erzwingt gleichmäßige Skalierung. Richten Sie das <min-x>+<width> des viewBox-Elements mit dem maximalen X-Wert des Viewports aus. Richten Sie den mittleren Y-Wert des viewBox-Elements mit dem mittleren Y-Wert des Viewports aus.

xMinYMax

Erzwingt gleichmäßige Skalierung. Richten Sie das <min-x> des viewBox-Elements mit dem kleinsten X-Wert des Viewports aus. Richten Sie das <min-y>+<height> des viewBox-Elements mit dem maximalen Y-Wert des Viewports aus.

xMidYMax

Erzwingt gleichmäßige Skalierung. Richten Sie den mittleren X-Wert des viewBox-Elements mit dem mittleren X-Wert des Viewports aus. Richten Sie das <min-y>+<height> des viewBox-Elements mit dem maximalen Y-Wert des Viewports aus.

xMaxYMax

Erzwingt gleichmäßige Skalierung. Richten Sie das <min-x>+<width> des viewBox-Elements mit dem maximalen X-Wert des Viewports aus. Richten Sie das <min-y>+<height> des viewBox-Elements mit dem maximalen Y-Wert des Viewports aus.

Die folgenden zwei Schlüsselwörter bestimmen, wie das SVG relativ zu den Grenzen des Containers skaliert werden soll. Die Angabe des meet- oder slice-Referenzwertes ist optional, und wenn angegeben, muss es eines der beiden Schlüsselwörter sein. meet ist der Standardwert.

meet

Skaliert die Grafik so, dass:

  • Das Seitenverhältnis erhalten bleibt.
  • Die gesamte viewBox innerhalb des Viewports sichtbar ist.
  • Die viewBox maximal vergrößert wird, während die anderen Kriterien weiterhin erfüllt sind.

In diesem Fall, wenn das Seitenverhältnis der Grafik nicht mit dem Viewport übereinstimmt, wird ein Teil des Viewports über die Grenzen der viewBox hinausragen (d.h. der Bereich, in den die viewBox zeichnet, wird kleiner als der Viewport sein).

slice

Skaliert die Grafik so, dass:

  • Das Seitenverhältnis erhalten bleibt.
  • Der gesamte Viewport von der viewBox abgedeckt wird.
  • Die viewBox maximal verkleinert wird, während die anderen Kriterien weiterhin erfüllt sind.

In diesem Fall, wenn das Seitenverhältnis der viewBox nicht mit dem Viewport übereinstimmt, wird ein Teil der viewBox über die Grenzen des Viewports hinausragen (d.h. der Bereich, in den die viewBox zeichnet, wird größer als der Viewport sein).

Beispiele

Nutzung von meet, wenn Breite > Höhe

Dieses Beispiel zeigt die Verwendung von meet, wenn die width des Elements größer als die height ist. Es präsentiert drei Varianten mit drei unterschiedlichen Ausrichtungswerten: xMidYMid, xMinYMid und xMaxYMid.

html
<svg viewBox="-1 -1 202 40" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <path
      id="smiley"
      d="M50,10 A40,40,1,1,1,50,90 A40,40,1,1,1,50,10 M30,40 Q36,35,42,40 M58,40 Q64,35,70,40 M30,60 Q50,75,70,60 Q50,75,30,60" />
  </defs>
html
<rect x="0" y="0" width="60" height="30">
  <title>xMidYMid meet</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="60"
  height="30"
  preserveAspectRatio="xMidYMid meet"
  x="0"
  y="0">
  <use href="#smiley" />
</svg>
html
<rect x="70" y="0" width="60" height="30">
  <title>xMinYMid meet</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="60"
  height="30"
  preserveAspectRatio="xMinYMid meet"
  x="70"
  y="0">
  <use href="#smiley" />
</svg>
html
<rect x="140" y="0" width="60" height="30">
  <title>xMaxYMid meet</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="60"
  height="30"
  preserveAspectRatio="xMaxYMid meet"
  x="140"
  y="0">
  <use href="#smiley" />
</svg>
html
</svg>
css
path {
  fill: yellow;
  stroke: black;
  stroke-width: 8px;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}

rect:hover,
rect:active {
  outline: 1px solid red;
}

Nutzung von slice, wenn Breite > Höhe

Dieses Beispiel zeigt die Verwendung von slice, wenn die width des Elements größer als die height ist. Es präsentiert drei Varianten mit drei unterschiedlichen Ausrichtungswerten: xMidYMin, xMidYMid und xMidYMax.

html
<svg viewBox="-1 -1 202 57" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <path
      id="smiley"
      d="M50,10 A40,40,1,1,1,50,90 A40,40,1,1,1,50,10 M30,40 Q36,35,42,40 M58,40 Q64,35,70,40 M30,60 Q50,75,70,60 Q50,75,30,60" />
  </defs>
html
<rect x="0" y="15" width="60" height="30">
  <title>xMidYMin slice</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="60"
  height="30"
  preserveAspectRatio="xMidYMin slice"
  x="0"
  y="15">
  <use href="#smiley" />
</svg>
html
<rect x="70" y="15" width="60" height="30">
  <title>xMidYMid slice</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="60"
  height="30"
  preserveAspectRatio="xMidYMid slice"
  x="70"
  y="15">
  <use href="#smiley" />
</svg>
html
<rect x="140" y="15" width="60" height="30">
  <title>xMidYMax slice</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="60"
  height="30"
  preserveAspectRatio="xMidYMax slice"
  x="140"
  y="15">
  <use href="#smiley" />
</svg>
html
</svg>
css
path {
  fill: yellow;
  stroke: black;
  stroke-width: 8px;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}

rect:hover,
rect:active {
  outline: 1px solid red;
}

Nutzung von meet, wenn Höhe > Breite

Dieses Beispiel zeigt die Verwendung von meet, wenn die height des Elements größer als die width ist. Es präsentiert drei Varianten mit drei unterschiedlichen Ausrichtungswerten: xMidYMin, xMidYMid und xMidYMax.

html
<svg viewBox="-1 -1 202 80" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <path
      id="smiley"
      d="M50,10 A40,40,1,1,1,50,90 A40,40,1,1,1,50,10 M30,40 Q36,35,42,40 M58,40 Q64,35,70,40 M30,60 Q50,75,70,60 Q50,75,30,60" />
  </defs>
html
<rect x="0" y="0" width="30" height="75">
  <title>xMidYMin meet</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="30"
  height="75"
  preserveAspectRatio="xMidYMin meet"
  x="0"
  y="0">
  <use href="#smiley" />
</svg>
html
<rect x="35" y="0" width="30" height="75">
  <title>xMidYMid meet</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="30"
  height="75"
  preserveAspectRatio="xMidYMid meet"
  x="35"
  y="0">
  <use href="#smiley" />
</svg>
html
<rect x="70" y="0" width="30" height="75">
  <title>xMidYMax meet</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="30"
  height="75"
  preserveAspectRatio="xMidYMax meet"
  x="70"
  y="0">
  <use href="#smiley" />
</svg>
html
</svg>
css
path {
  fill: yellow;
  stroke: black;
  stroke-width: 8px;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}

rect:hover,
rect:active {
  outline: 1px solid red;
}

Nutzung von slice, wenn Höhe > Breite

Dieses Beispiel zeigt die Verwendung von slice, wenn die height des Elements größer als die width ist. Es präsentiert drei Varianten mit drei unterschiedlichen Ausrichtungswerten: xMinYMid, xMidYMid und xMaxYMid.

html
<svg viewBox="-1 -1 202 80" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <path
      id="smiley"
      d="M50,10 A40,40,1,1,1,50,90 A40,40,1,1,1,50,10 M30,40 Q36,35,42,40 M58,40 Q64,35,70,40 M30,60 Q50,75,70,60 Q50,75,30,60" />
  </defs>
</svg>
html
<rect x="0" y="0" width="30" height="75">
  <title>xMinYMid slice</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="30"
  height="75"
  preserveAspectRatio="xMinYMid slice"
  x="0"
  y="0">
  <use href="#smiley" />
</svg>
html
<rect x="35" y="0" width="30" height="75">
  <title>xMidYMid slice</title>
</rect>
<svg
  viewBox="0 0 100 100"
  width="30"
  height="75"
  preserveAspectRatio="xMidYMid slice"
  x="35"
  y="0">
  <use href="#smiley" />
</svg>
html
  <rect x="70" y="0" width="30" height="75">
    <title>xMaxYMid slice</title>
  </rect>
  <svg
    viewBox="0 0 100 100"
    width="30"
    height="75"
    preserveAspectRatio="xMaxYMid slice"
    x="70"
    y="0">
    <use href="#smiley" />
  </svg>
</svg>
css
path {
  fill: yellow;
  stroke: black;
  stroke-width: 8px;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}

rect:hover,
rect:active {
  outline: 1px solid red;
}

Verwendung des none-Ausrichtungswertes

Dieses Beispiel zeigt ein Element, bei dem der Ausrichtungswert auf none gesetzt ist.

html
<svg viewBox="-1 -1 192 62" xmlns="http://www.w3.org/2000/svg">
  <defs>
    <path
      id="smiley"
      d="M50,10 A40,40,1,1,1,50,90 A40,40,1,1,1,50,10 M30,40 Q36,35,42,40 M58,40 Q64,35,70,40 M30,60 Q50,75,70,60 Q50,75,30,60" />
  </defs>
</svg>
html
  <!-- none -->
  <rect x="0" y="0" width="160" height="60">
    <title>none</title>
  </rect>
  <svg
    viewBox="0 0 100 100"
    width="160"
    height="60"
    preserveAspectRatio="none"
    x="0"
    y="0">
    <use href="#smiley" />
  </svg>
</svg>
css
path {
  fill: yellow;
  stroke: black;
  stroke-width: 8px;
  stroke-linecap: round;
  stroke-linejoin: round;
  pointer-events: none;
}

rect:hover,
rect:active {
  outline: 1px solid red;
}

Elemente

Sie können dieses Attribut mit den folgenden SVG-Elementen verwenden:

feImage

Für <feImage> definiert preserveAspectRatio, wie das referenzierte Bild in das durch das <feImage>-Element definierte Rechteck passen soll.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

image

Für <image> definiert preserveAspectRatio, wie das referenzierte Bild in das durch das <image>-Element definierte Rechteck passen soll.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

marker

Für <marker> gibt preserveAspectRatio an, ob eine gleichmäßige Skalierung durchgeführt werden muss, um den Element-Viewport anzupassen.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

pattern

Für <pattern> gibt preserveAspectRatio an, ob eine gleichmäßige Skalierung durchgeführt werden muss, um den Element-Viewport anzupassen.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

svg

Für <svg> gibt preserveAspectRatio an, ob eine gleichmäßige Skalierung durchgeführt werden muss, um den Element-Viewport anzupassen.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

symbol

Für <symbol> gibt preserveAspectRatio an, ob eine gleichmäßige Skalierung durchgeführt werden muss, um den Element-Viewport anzupassen.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

view

Für <view> gibt preserveAspectRatio an, ob eine gleichmäßige Skalierung durchgeführt werden muss, um den Element-Viewport anzupassen.

Wert <align> <meetOrSlice>?
Standardwert xMidYMid meet
Animierbar Ja

Spezifikationen

Specification
Filter Effects Module Level 1
# element-attrdef-feimage-preserveaspectratio
Scalable Vector Graphics (SVG) 2
# PreserveAspectRatioAttribute