私がSVGファイルを持っているとしましょう:
<svg width="1024" height="768" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<text x='20' y='60' style="font-size: 60px">b</text>
<text x='100' y='60' style="font-size: 60px">a</text>
</svg>
a
とb
の上部を何らかの方法で揃えたい。実際、roofline
ではなくbaseline
に基づいてポジショニングを行いたいです!
alignment-baseline
プロパティはあなたが探しているもので、次の値を取ることができます
auto | baseline | before-Edge | text-before-Edge |
middle | central | after-Edge | text-after-Edge |
ideographic | alphabetic | hanging | mathematical |
inherit
W3cからの説明
このプロパティは、オブジェクトが親に対してどのように配置されるかを指定します。このプロパティは、この要素のどのベースラインを、親の対応するベースラインに合わせるかを指定します。たとえば、これにより、ローマ字テキストのアルファベットのベースラインを、フォントサイズの変更に合わせて揃えることができます。デフォルトでは、alignment-baselineプロパティの計算値と同じ名前のベースラインになります。つまり、ブロック進行方向の「表意文字」整列点の位置は、整列されるオブジェクトのベースライン表の「表意文字」ベースラインの位置です。
残念ながら、これは、FirefoxがSVGテキストモジュールのプレゼンテーション属性の多くを実装していないように見える後の状態を達成する「正しい」方法ですが( 'SVG in Firefox' MDN Documentation )
SVG仕様によると、alignment-baseline
は<tspan>
、<textPath>
、<tref>
、および<altGlyph>
にのみ適用されます。私の理解では、それはそれらの上の<text>
オブジェクトからそれらを相殺するために使用されるということです。あなたが探しているのはdominant-baseline
だと思います。
dominant-baseline
の可能な値は次のとおりです。
auto | use-script | no-change | reset-size | ideographic | alphabetic | hanging | mathematical | central | middle | text-after-Edge | text-before-Edge | inherit
可能な各値の詳細については、 dominant-baselineプロパティのW3C勧告 を確認してください。
attr( "dominant-baseline"、 "central")
IEでこれをテストしている場合、dominant-baselineとalignment-baselineはサポートされていません。
IEでテキストを中央に配置する最も効果的な方法は、「dy」で次のようなものを使用することです。
<text font-size="ANY SIZE" text-anchor="middle" "dy"="-.4em"> Ya Text </text>
負の値は上にシフトし、dyの正の値は下にシフトします。 -.4emの使用は、-。5emよりも垂直方向の中心が少し高いように見えますが、その判断はあなたが行います。
SVG推奨 を見た後、特に異なるフォントや言語を混在させる場合、ベースラインプロパティは他のテキストに対してテキストを配置することを意図していることがわかりました。最上位がy
になるようにテキストを配置する場合は、dy = "y + the height of your text"
を使用する必要があります。