preserveAspectRatio属性は、ビューポートの領域にビューボックスの領域をどのようにあてはめるかを指定する際に使われます。
preserveAspectRatio属性によって、新しいビューポートを確立する要素の確立したビューポートにビューボックスの領域をあてはめる際に縦横比を保つか保たないかが指定されます。
preserveAspectRatio属性の値は、ビューポートの領域へのビューボックスの領域のあてはめ方です。
"defer"、配置方法、"meet"の3つの値を記述します。defer"と"meet"は必要がなければ省略できます。
配置方法は、ビューポートとビューボックスで縦横比が異なる場合の配置方法を示します。
値は、"none"、"xMinYMin"、"xMidYMin"、"xMaxYMin"、"xMinYMid"、"xMidYMid"、"xMaxYMid"、"xMinYMax"、"xMidYMax"、"xMidYMax"です。
"none"の場合は、縦横比を保ちません。ビューポートの領域いっぱいにビューボックスの領域をあてはめます。
縦横比を保つ場合は、"none"以外の値になります。
xMinは、ビューボックスの最も小さなx座標をビューポートの最も小さなx座標にそろえることを示します。
xMidは、ビューボックスの中央のx座標をビューポートの中央のx座標にそろえることを示します。
xMaxは、ビューボックスの最も大きなx座標をビューポートの最も大きなx座標にそろえることを示します。
YMinは、ビューボックスの最も小さなy座標をビューポートの最も小さなy座標にそろえることを示します。
YMidは、ビューボックスの中央のy座標をビューポートの中央のy座標にそろえることを示します。
YMaxは、ビューボックスの最も大きなy座標をビューポートの最も大きなy座標にそろえることを示します。
"meet"は、縦横比を保ち、ビューボックスの領域全体がビューポートの領域に収まるように、できるだけ拡大することを示します。ビューポートとビューボックスで縦横比が異なる場合は、ビューポートの領域の一部は何も描かれないことになります。
例えば、
<svg width="240" height="320" viewBox="0 0 80 160" preserveAspectRatio="none"/>
のように書けば、幅240、高さ320の矩形領域がビューポートとなり、(0,0)(80,0)(80,160)(0,160)で囲まれるビューボックスの領域が縦3倍横2倍に拡大され、あてはめられます。また、
<svg width="240" height="320" viewBox="0 0 80 160" preserveAspectRatio="xMidYMid meet"/>
のように書けば、ビューボックスの領域が縦横それぞれ2倍に拡大され、x座標y座標とも中央をそろえてあてはめられます。結果として、左右に空白の領域ができることになります。
値の先頭に"defer"と加えた場合は、参照される側のpreserveAspectRatio属性を利用することを示します。animation要素のpreserveAspectRatio属性において有効です。(仕様では、imageおよびvideo要素のpreserveAspectRatio属性においても有効となっていますが、SVG Tiny 1.2でSVG文書を参照するのはanimation要素だけのような・・・)
例えば、
<animation xlink:href="sample.svg" preserveAspectRatio="deferxMidYMid meet" width="100" height="100"/>
のように書けば、sample.svgのルートのsvg要素のpreserveAspectRatio属性の値が利用されます。sample.svgのルートのsvg要素にpreserveAspectRatio属性がない場合は、animation要素のpreserveAspectRatio属性の値から"defer"を除いた"xMidYmid meet"が適用されます。
preserveAspectRatio属性がない場合は"xMidYMid meet"として扱われます。
preserveAspectRatio属性の付いた要素のviewBox属性によってあるいは暗黙のうちにビューボックスが指定されない場合は、無視されます。
preserveAspectRatio属性によって、新しいビューポートを確立する要素の確立したビューポートにビューボックスの領域をあてはめる際に縦横比を保つか保たないかが指定されます。
preserveAspectRatio属性の値は、ビューポートの領域へのビューボックスの領域のあてはめ方です。
"defer"、配置方法、"meet"の3つの値を記述します。defer"と"meet"は必要がなければ省略できます。
配置方法は、ビューポートとビューボックスで縦横比が異なる場合の配置方法を示します。
値は、"none"、"xMinYMin"、"xMidYMin"、"xMaxYMin"、"xMinYMid"、"xMidYMid"、"xMaxYMid"、"xMinYMax"、"xMidYMax"、"xMidYMax"です。
"none"の場合は、縦横比を保ちません。ビューポートの領域いっぱいにビューボックスの領域をあてはめます。
縦横比を保つ場合は、"none"以外の値になります。
xMinは、ビューボックスの最も小さなx座標をビューポートの最も小さなx座標にそろえることを示します。
xMidは、ビューボックスの中央のx座標をビューポートの中央のx座標にそろえることを示します。
xMaxは、ビューボックスの最も大きなx座標をビューポートの最も大きなx座標にそろえることを示します。
YMinは、ビューボックスの最も小さなy座標をビューポートの最も小さなy座標にそろえることを示します。
YMidは、ビューボックスの中央のy座標をビューポートの中央のy座標にそろえることを示します。
YMaxは、ビューボックスの最も大きなy座標をビューポートの最も大きなy座標にそろえることを示します。
"meet"は、縦横比を保ち、ビューボックスの領域全体がビューポートの領域に収まるように、できるだけ拡大することを示します。ビューポートとビューボックスで縦横比が異なる場合は、ビューポートの領域の一部は何も描かれないことになります。
例えば、
<svg width="240" height="320" viewBox="0 0 80 160" preserveAspectRatio="none"/>
のように書けば、幅240、高さ320の矩形領域がビューポートとなり、(0,0)(80,0)(80,160)(0,160)で囲まれるビューボックスの領域が縦3倍横2倍に拡大され、あてはめられます。また、
<svg width="240" height="320" viewBox="0 0 80 160" preserveAspectRatio="xMidYMid meet"/>
のように書けば、ビューボックスの領域が縦横それぞれ2倍に拡大され、x座標y座標とも中央をそろえてあてはめられます。結果として、左右に空白の領域ができることになります。
値の先頭に"defer"と加えた場合は、参照される側のpreserveAspectRatio属性を利用することを示します。animation要素のpreserveAspectRatio属性において有効です。(仕様では、imageおよびvideo要素のpreserveAspectRatio属性においても有効となっていますが、SVG Tiny 1.2でSVG文書を参照するのはanimation要素だけのような・・・)
例えば、
<animation xlink:href="sample.svg" preserveAspectRatio="deferxMidYMid meet" width="100" height="100"/>
のように書けば、sample.svgのルートのsvg要素のpreserveAspectRatio属性の値が利用されます。sample.svgのルートのsvg要素にpreserveAspectRatio属性がない場合は、animation要素のpreserveAspectRatio属性の値から"defer"を除いた"xMidYmid meet"が適用されます。
preserveAspectRatio属性がない場合は"xMidYMid meet"として扱われます。
preserveAspectRatio属性の付いた要素のviewBox属性によってあるいは暗黙のうちにビューボックスが指定されない場合は、無視されます。