Ich habe eine Reihe von SVG-Rechtecken (mit D3.js) und möchte beim Mouseover eine Nachricht anzeigen. Die Nachricht sollte von einem Feld umgeben sein, das als Hintergrund dient. Sie sollten beide perfekt zueinander und zum Rechteck (oben und zentriert) ausgerichtet sein. Was ist der beste Weg, dies zu tun?
Ich habe versucht, einen SVG-Text mit den Attributen "x", "y", "width" und "height" hinzuzufügen und dann ein SVG-Rechteck voranzustellen. Das Problem ist, dass der Referenzpunkt für den Text in der Mitte liegt (da ich möchte, dass er zentriert ausgerichtet ist, was ich verwendet habe text-anchor: middle
), aber für das Rechteck ist es die obere linke Koordinate, und ich wollte einen kleinen Rand um den Text, der ihn irgendwie macht ein Schmerz.
Die andere Option war die Verwendung eines HTML-Div, was sehr schön wäre, da ich den Text und den Abstand direkt hinzufügen kann, aber nicht weiß, wie ich die absoluten Koordinaten für jedes Rechteck ermitteln kann. Gibt es eine Möglichkeit, dies zu tun?
quelle
Antworten:
Sie können das Titelelement wie von Phrogz angegeben verwenden. Es gibt auch einige gute Tooltips wie jQuerys Tipsy http://onehackoranother.com/projects/jquery/tipsy/ (mit dem alle Titelelemente ersetzt werden können), Bob Monteverdes nvd3 oder sogar den Tooltip von Twitter aus dem Bootstrap http: // twitter.github.com/bootstrap/
quelle
Können Sie einfach das SVG-
<title>
Element und das Standard-Browser-Rendering verwenden, das es vermittelt? (Hinweis: Dies ist nicht dasselbe wie dastitle
Attribut, das Sie für div / img / spans in HTML verwenden können. Es muss ein untergeordnetes Element mit dem Namen sein.title
)Wenn Sie HTML wirklich in Ihrem SVG anzeigen möchten, können Sie HTML direkt einbetten:
… Aber dann brauchen Sie JS, um das Display ein- und auszuschalten. Wie oben gezeigt, besteht eine Möglichkeit, das Etikett an der richtigen Stelle erscheinen zu lassen, darin, das Rect und das HTML in dasselbe zu verpacken, das
<g>
beide zusammen positioniert.Um mithilfe von JS zu ermitteln, wo sich ein SVG-Element auf dem Bildschirm befindet, können Sie
getBoundingClientRect()
beispielsweise http://phrogz.net/svg/html_location_in_svg_in_html.xhtml verwendenquelle
foreignObject
in Internet Explorer<rect width="200" height="50"></rect>
<title>
keine Auswirkungen auf mobile Geräte.Der einzige gute Weg, den ich gefunden habe, war die Verwendung von Javascript, um einen Tooltip zu verschieben
<div>
. Dies funktioniert natürlich nur, wenn Sie SVG in einem HTML-Dokument haben - nicht eigenständig. Und es erfordert Javascript.quelle
Ich gehe bei meinem Setup immer mit dem generischen CSS-Titel um. Ich erstelle gerade Analysen für meine Blog-Administrationsseite. Ich brauche nichts Besonderes. Hier ist ein Code ...
Und ein Screenshot von Chrom ...
quelle