Это гигантский хак, но мы можем приблизить вертикальную среднюю позицию, принимая во внимание размер шрифта.
Спецификация определяет central
следующим образом:
central
Это идентифицирует вычисленную базовую линию, которая находится в центре блока EM.
Мы можем взять EM box
известного размера шрифта и измерить егоограничивающая рамка для вычисления центра.
<?xml version="1.0"?>
<svg width="300" height="300" xmlns="http://www.w3.org/2000/svg">
<path d="M 10 100 h 290" stroke="blue" stroke-width=".5" />
<text id="default-text" x="20" y="100" font-size="5em">
M
</text>
<script>
window.onload = function() {
var text = document.getElementById("default-text"),
bbox = text.getBBox(),
actualHeight = (100 - bbox.y),
fontSize = parseInt(window.getComputedStyle(text)["fontSize"]),
offsetY = (actualHeight / 2) - (bbox.height - fontSize);
text.setAttribute("transform", "translate(0, " + offsetY + ")");
}
</script>
<path d="M 10 200 h 290" stroke="blue" stroke-width=".5" />
<text id="reference-text" x="20" y="200" font-size="5em"
style="dominant-baseline: central;">
M
</text>
</svg>
Очевидно, что код может быть намного чище, но это всего лишь подтверждение концепции.