2016-02-15 16 views
5

WebページにSVGパスを追加していますが、Firefox 43.0に問題があります。Firefox getBoundingClientRect()は変換を考慮していません

Path without transform

:私が私のパスに transform: scale(0.1)を適用すると、Firefoxがここ

変換する前に、私の道のスクリーンショットだし、正しい外接矩形( getBoundingClientRect()経由)の境界クライアント矩形を更新しないことが表示されます

そして、ここで明確にバウンディングボックスの外側のビジュアルと、適用される変換である:

Path with transform

これとは対照的に、Chromeは予想通りにバウンディングボックスを更新しています。 (制約の割合に注意してください。)

Path with transform in Chrome

この問題は、クロムまたはエッジのいずれかの上に存在しません。私は、問題は、バージョン12.0で修正されたと言いたthis old bug from 2012見つけた、およびドキュメントの状態:

Geckoの12.0から始まっ

(Firefoxの12.0/Thunderbirdの12.0/SeaMonkeyの2.9)、CSSの効果は変換を計算するときに考慮されます要素の境界矩形

...これは真実ではないようです。他のブラウザでは、円を元のサイズの10%に縮小してから、クライアント矩形から座標オフセットを計算して元の100%スケールの位置に配置しました。しかし、クライアント矩形はFirefoxでの変換後に更新されないので、計算が乱れてしまいます。

Firefoxでこれを回避するにはどうすればよいですか?

+0

あなたは何を意味しているのですか? –

+0

変換属性はどういう意味ですか? –

答えて

3

属性を使用して変換を設定できます。

<path transform="scale(0.1)" d="..."/> 

またはCSSです。 CSSを使うのが新しい方法です。 SVG 1.1仕様では属性変換のみが指定されています。

getBoundingClientRect doesn't take CSS transforms into account現在Firefox上にありますが、変換属性を考慮しています。

+0

この属性を追加すると、上記のスクリーンショットで見ていたバウンディングボックスの問題が確実に修正されます。私はCSSを使って 'transform'プロパティをアニメートしようとしていたので、この追加属性が問題になることがありましたが、とにかくアニメーションを動作させることができました。 –

+0

FirefoxでCSS変換を使用して要素の位置を取得するために使用できるものはありますか?残念ながら、私は属性のオプションを持っていません。 – Norbert

+0

@Norbert Firefoxにソースコードをダウンロードして問題を修正し、[bugzilla](https://bugzilla.mozilla.org/show_bug.cgi?id=1066435)にパッチをアップロードしてください。 Firefoxのバグ。 –

関連する問題