Eu tenho uma série de retângulos SVG (usando D3.js) e quero exibir uma mensagem ao passar o mouse, a mensagem deve estar cercada por uma caixa que atua como plano de fundo. Eles devem estar perfeitamente alinhados entre si e com o retângulo (na parte superior e centralizado). Qual é a melhor maneira de fazer isso?
Tentei adicionar um texto svg usando os atributos "x", "y", "largura" e "altura" e, em seguida, prefixar um rect svg. O problema é que o ponto de referência para o texto está no meio (já que eu o quero centralizado, usei text-anchor: middle
), mas para o retângulo é a coordenada superior esquerda, além disso, eu queria um pouco de margem ao redor do texto, o que o torna meio uma dor.
A outra opção era usar um div html, o que seria bom, porque posso adicionar o texto e o preenchimento diretamente, mas não sei como obter as coordenadas absolutas de cada retângulo. Existe uma maneira de fazer isso?
fonte
Respostas:
Você pode usar o elemento de título conforme Phrogz indicado. Existem também algumas boas dicas de ferramenta como jQuery's Tipsy http://onehackoranother.com/projects/jquery/tipsy/ (que podem ser usadas para substituir todos os elementos do título), o nvd3 de Bob Monteverde ou mesmo a dica de ferramenta do Twitter em seu Bootstrap http: // twitter.github.com/bootstrap/
fonte
Você pode usar simplesmente o elemento SVG
<title>
e a renderização do navegador padrão que ele transmite? (Nota: este não é o mesmo que otitle
atributo que você pode usar em div / img / spans em html, ele precisa ser um elemento filho chamadotitle
)Como alternativa, se você realmente deseja mostrar HTML em seu SVG, pode incorporar HTML diretamente:
... mas então você precisaria de JS para ligar e desligar a tela. Como mostrado acima, uma maneira de fazer o rótulo aparecer no lugar certo é envolver o retângulo e o HTML na mesma
<g>
posição que os posiciona juntos.Para usar JS para descobrir onde um elemento SVG está na tela, você pode usar
getBoundingClientRect()
, por exemplo, http://phrogz.net/svg/html_location_in_svg_in_html.xhtmlfonte
foreignObject
não é compatível com Internet Explorer<rect width="200" height="50"></rect>
<title>
não tem efeito em dispositivos móveis.A única maneira boa que encontrei foi usar Javascript para mover uma dica de ferramenta
<div>
. Obviamente, isso só funciona se você tiver SVG dentro de um documento HTML - não autônomo. E requer Javascript.fonte
Eu sempre uso o título css genérico com minha configuração. Estou apenas criando análises para a página de administração do meu blog. Eu não preciso de nada sofisticado. Aqui está um código ...
E uma captura de tela do cromo ...
fonte
Eu inventei algo usando apenas HTML + CSS. espero que funcione para você
fonte