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>
aufnone
gesetzt ist, der optionale<meetOrSlice>
-Wert ignoriert wird. xMinYMin
-
Erzwingt gleichmäßige Skalierung. Richten Sie das
<min-x>
desviewBox
-Elements mit dem kleinsten X-Wert des Viewports aus. Richten Sie das<min-y>
desviewBox
-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>
desviewBox
-Elements mit dem kleinsten Y-Wert des Viewports aus. xMaxYMin
-
Erzwingt gleichmäßige Skalierung. Richten Sie das
<min-x>+<width>
desviewBox
-Elements mit dem maximalen X-Wert des Viewports aus. Richten Sie das<min-y>
desviewBox
-Elements mit dem kleinsten Y-Wert des Viewports aus. xMinYMid
-
Erzwingt gleichmäßige Skalierung. Richten Sie das
<min-x>
desviewBox
-Elements mit dem kleinsten X-Wert des Viewports aus. Richten Sie den mittleren Y-Wert desviewBox
-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 desviewBox
-Elements mit dem mittleren Y-Wert des Viewports aus. Dies ist der Standardwert. xMaxYMid
-
Erzwingt gleichmäßige Skalierung. Richten Sie das
<min-x>+<width>
desviewBox
-Elements mit dem maximalen X-Wert des Viewports aus. Richten Sie den mittleren Y-Wert desviewBox
-Elements mit dem mittleren Y-Wert des Viewports aus. xMinYMax
-
Erzwingt gleichmäßige Skalierung. Richten Sie das
<min-x>
desviewBox
-Elements mit dem kleinsten X-Wert des Viewports aus. Richten Sie das<min-y>+<height>
desviewBox
-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>
desviewBox
-Elements mit dem maximalen Y-Wert des Viewports aus. xMaxYMax
-
Erzwingt gleichmäßige Skalierung. Richten Sie das
<min-x>+<width>
desviewBox
-Elements mit dem maximalen X-Wert des Viewports aus. Richten Sie das<min-y>+<height>
desviewBox
-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 dieviewBox
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 derviewBox
über die Grenzen des Viewports hinausragen (d.h. der Bereich, in den dieviewBox
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
.
<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>
<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>
<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>
<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>
</svg>
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
.
<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>
<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>
<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>
<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>
</svg>
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
.
<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>
<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>
<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>
<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>
</svg>
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
.
<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>
<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>
<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>
<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>
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.
<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>
<!-- 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>
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
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 |