Jump to content
  • 0

svg alignment-baseline


CEBEP
 Share

Question

Здравствуйте. занимаюсь освоением svg. Для позиционирования текста использую верхнюю грань, чтобы было удобно выровнять bounding box относительно других элементов. Чтобы выравнивание происходило по верхней грани текста я задаю тегу tspan параметр alignment-baseline со значением before-edge, после чего почему-то лишаюсь кросс-браузерности. На примере видно, что в хроме слово not опустилось вниз, сровняв свою верхнюю границу bounding box-а с базовой линией элемента text, в то время как в фаерфоксе мы видим аккуратную строку без каких-либо сдвигов. Как исправить ситуацию и добится того, чтобы во всех браузерах позиционирование текста происходило так же как в хроме? В соответствии со страничкой с cssportal.xom, tspan умеет использовать alignment-baseline. Как улучшить ситуацию ума не приложу...

В худшем случае (приведёт к перепилу), можно решить проблему ответив на более широкий вопрос: как спозиционировать текст так, чтобы границы, в которые он попадёт можно было знать с точностью до пикселя, при условии, что ширина и высота текста извесны.

 

P.S. помню, что тут в основном вопросы по css, связанные на прямую с html, но моя задача всё-таки реализуется в браузере и без использования языков программирования...

Link to comment
Share on other sites

3 answers to this question

Recommended Posts

  • 0

В описании tspan в том же MDN написано, что в Gecko (движке Фокса) некоторые презентационные атрибуты не работают. А alignment-baseline как раз относится к презентационным атрибутам.

Решение сходу на ум не приходит, надо еще подумать…

Link to comment
Share on other sites

  • 0

пильнул фикс на js для этой ерунды... может кому пригодится... Использует d3...

    /*    Move text before edge line from it's base line. It should work as alignment-baseline: before-edge css property. But it's not work in canvg and gecko.     * @param text {Object} d3.selection of text    */    BEFORE_EDGE_FIX : function(text) {      var baseline = text.attr("y");      return text.attr("y", 2 * baseline - text.node().getBBox().y);    },
  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy