jap*_*iss 14 internet-explorer svg
以下SVG文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://www.w3.org/2000/svg" width="400" height="400">
<g transform="translate(200, 200)">
<text text-anchor="middle" dominant-baseline="text-after-edge">Why don't I move?</text>
</g>
</svg>
Run Code Online (Sandbox Code Playgroud)
如果我改变呈现在Internet Explorer 10.0完全相同text的dominant-baseline属性text-before-edge.
在Chrome 38.0中,它会像我预期的那样移动.
该演示页面应该说明所有不同的dominant-baseline设置.它也适用于Chrome,但所有文本块都显示在IE中的相同y位置.
但是,这个Microsoft文档使得它看起来甚至IE 9都支持该属性.
我的SVG文件(和演示文件)是否会使IE无效,或者我是否需要使用我的布局手动执行此操作?
我正在生成以绝对坐标布局的文件,因此如果我需要停止使用此基线属性并自行进行偏移,这不是一个大问题.
正如rockpiper 回答的那样,目前IE 和Edge 都不支持它。但是,有解决方法。
一个概念是计算边界客户端矩形 ( getBoundingClientRect)的父级的偏移量与属性y(主要用于定位)之间的差异。
然后您可以设置dy调整垂直对齐方式。
var parentElem = mySvg; // Set it to the closest SVG (or G) parent tag
var y = myText.hasAttribute('y') ? myText.getAttribute('y') : 0;
var dy = myText.hasAttribute('dy') ? myText.getAttribute('dy') : 0;
dy += y - (myText.getBoundingClientRect().top - parentElem.getBoundingClientRect().top);
// This would cause to align it similarly to CSS 'vertical-align: top'
myText.setAttribute('dy', dy);
Run Code Online (Sandbox Code Playgroud)
根据需要,您可以减去myText.getBoundingClientRect().height以获得另一个垂直对齐。