adobe-webplatform / Snap.svg

The JavaScript library for modern SVG graphics.
http://snapsvg.io
Apache License 2.0
13.95k stars 1.15k forks source link

Text posittion / bounding box inconsistent #647

Open arsu-leo opened 3 years ago

arsu-leo commented 3 years ago

The text position is not consitent with it's bounding box:

var container = document.getElementById('container')
var svg = Snap(200, 200);
container.appendChild(svg.node);

//Set background
var bgRect = svg.rect(0, 0, '100%', '100%');
bgRect.attr({ fill: '#DDDDDD' });

//Main cross
var vert = svg.line(100, 0, 100, 200);
vert.attr({ 'stroke': '#000000','stroke-width': 1});
var hor = svg.line(0, 100, 200, 100);
hor.attr({ 'stroke': '#000000','stroke-width': 1});

//Text element
var text = svg.text(100, 100, 'TEXT');
text.attr({'id' : 'text-id'});

var bbox = text.getBBox();
var text = "Text attr (x, y):" + [text.attr('x'), text.attr('y')].join(', ')
    + "<br>"
  + "Text bounds(x, y, height, width):" + [bbox.x, bbox.y, bbox.h, bbox.w].join(', ');
var p = document.createElement('p');
p.innerHTML = text;
document.body.appendChild(p);

HTML:

<div id="container">
</div>  

Fiddle: https://jsfiddle.net/x5qf7bz4/4/

Output: Text attr (x, y):100, 100 Text bounds(x, y, height, width):100, 86, 17, 41.1

Crreating a text at 100,100, attr(x, y) is 100, but it's bounding box is 100, 86.

Text is based on bottom left instead of top left as all other elements?

Thank you

ibrierley commented 3 years ago

This just comes from whatever the browser thinks it is. Eg if you add console.log(text.node.getBBox()) you will see it's the same.

x,y are the positions of the text baseline.