2016-11-11 8 views
0

私はすべてが順調であるGoogle ChromeでFireFoxでsvgパスの実際のサイズを検出する方法は?

を、本当の「パス」のサイズを取得しようとしているためgetBoundingClientRect機能を使用しますが、Firefoxでは、私は異なる結果を取得しています:

1. 100px x 100px 
2. 100px x 100px 

しかし、Firefoxで:

1. 104px x 104px 
2. 100px x 100px 

なぜstroke-width="1"に4pxが追加されましたか?どのようにFFで空のスペースなしで実際のサイズを取得するには?

enter image description here

<div>With stroke-width="1"</div> 
 
<svg width="110" height="110"> 
 
    <path stroke-width="1" d="M0 0 L 100 0 L100 100 L 0 100 Z" fill="black" stroke="black"></path> 
 
</svg> 
 
<br> 
 
<br> 
 
<div>With stroke-width="0"</div> 
 
<svg width="110" height="110"> 
 
    <path stroke-width="0" d="M0 0 L 100 0 L100 100 L 0 100 Z" fill="black" stroke="black"></path> 
 
</svg>

P.S. 私はこのパスに "テキスト付きの行"を追加するためにtriyngです。 getBoundingClientRect関数でパスの位置+サイズを取得し、それらの座標で新しいdivを作成します。

結果:

enter image description here

+0

Chromeはあなたのパスが、ストロークが作っ各エッジから2つのピクセルを突き出していない100×100で、間違っていること104のx、私はこのパスに「テキストとライン」を追加するtriyngよ104 –

+0

@RobertLongson 。 'getBoundingClientRect'関数でパスの位置+サイズを取得し、この座標に新しいdivを作成します。結果:http://s1.micp.ru/i6QC3.png – MixerOID

+0

あなたの問題は、幅が104ピクセルで高さのパスを作成してから、コンテナ要素で100ピクセルにクリップすることです。コンテナではなくパスを測定し、次にコンテナの位置を決めます。 –

答えて

0

私はFFのためのソリューションを作りました。シンプルだが動作する。

last_current.attr('stroke-width',0); // FireFox fix! 
let c_pos = last_current[0].getBoundingClientRect(); 
last_current.attr('stroke-width', 1); // FireFox fix! 
関連する問題