Positionnement des éléments SVG à l'aide de CSS
Assumer les suivantes document svg:
<svg version="1.1" baseProfile="full" width="300" height="200" xmlns="http://www.w3.org/2000/svg">
<text x="20" y="20">My text</text>
</svg>
Maintenant ce que je veux faire est de repositionner ce texte à l'aide de css.
J'ai essayé d'ajouter style="dx:20"
et style="transform: translate(20)"
. Les deux n'ont aucun effet dans firefox et safari. L'ajout de ces normal attributs fonctionne très bien mais je ne peux pas diviser le positionnement de l'actuel code.
Réglage x
, y
, left
et top
dans le style ne fonctionne pas non plus.
Est-il un moyen pour positionner un élément svg à l'aide de css?
- Je pense que je vais utiliser des symboles comme une alternative décente. L'utilisateur doit spécifier un peu plus la main, mais au moins je n'ai pas à passer à la présentation des choses par ma bibliothèque de code.
- Avez-vous trouvé une solution à ce problème Yorick? J'espérais position de mon SVG avec CSS document, mais dont le positionnement ne fonctionne pas malheureusement...
- Nope, jamais trouvé une solution. Je pense que David Thomas réponse est le meilleur que vous trouverez dès maintenant.
- Avez-vous trouvé une solution à ce problème Yorick? J'espérais position de mon animation SVG textes de réactivité, bu puis les animations arrêter malheureusement...
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à déplacer certains SVG texte dans google chrome en utilisant le code CSS suivant:
Cependant, il n'est pas extensible dans Firefox...
-moz-transform
n'est pas nécessaire;-transform
fonctionne très bien!Je suis venu ici à la recherche d'un correctif, mais résolu le problème moi-même, pensé que je voudrais partager:
Semble fonctionner dans tous les navigateurs sauf Internet Explorer, droit jusqu'à ce que Microsoft Edge (qui n'est même pas encore sorti) ce qui est assez décevant. Les éléments que j'ai testé sur:
Le seul problème que j'ai eu, c'est avec
<text>
éléments, et la seule solution est d'envelopper le<text>
dans un<g>
et appliquer la transformation de que les. Cela devrait aussi fonctionner pour tous les éléments, je n'ai pas encore testé qui ont des problèmes avectransform: translate()
.Je n'ai pas trouvé une bonne solution de repli pour Internet Explorer, au lieu que j'ai fait en sorte que les transformations ne sont pas vitaux pour le fonctionnement de la SVG.
Ici est un hacky possibilité de positionner précisément le texte-éléments purement CSS, en abusant des attributs ‘letter-spacing’ pour la coordonnée x et de référence-shift’ pour la coordonnée y:
de référence-shift’ est applicable seulement sur ‘tspan’ Éléments, ce qui rend l'intérieur
<tspan>
nécessaires dans le code. Les valeurs positives de référence de base-maj déplacer le texte vers le haut, à l'opposé de la direction normale dans le svg.‘letter-spacing’ besoin d'une lettre de mise en demeure pour avoir un effet, et donc de faire de la
.
nécessaire. Pour éliminer la largeur de cette première lettre, nous utilisons la spéciale de la policecssPosAnchor
, où la dot n'a pas de largeur et pas de forme. La suite<tspan>
en outre restaure la police et de la lettre de l'espacement.Portée
Devraient travailler dans tous conformes SVG mise en œuvre.
Il y a une limitation de durée indéfinie, bien que pour x négatif coordonnées. Le cahier des charges pour l' ‘letter-spacing’ attribut dit: “les Valeurs peuvent être négatives, mais il peut y avoir la mise en œuvre des limites spécifiques.”
Compatibilité
Texte ‘direction’ changement devrait fonctionner très bien, lorsqu'il a lieu à l'intérieur
<tspan>
.Un non-standard ‘writing-mode’ doit être imposée à l'extérieur sur le
<text>
. Il y aura très certainement des problèmes avec ça.Probablement le plus important " texte d'ancre’ valeurs milieu et fin peut être rendue possible comme ceci:
La
‹space›.
avant la fermeture<\text>
étiquette de produit espacement égal à moins abscisse. Si l'intérieur<tspan>
est déplacé autour de mais la préserve de l'espace dans le<text>
comme si elle était encore là.Puisqu'il peut y avoir la mise en œuvre des limites spécifiques sur des valeurs négatives pour l'espacement des attributs, ce n'est pas garanti sur tous les clients!
À l'instant, il semblerait -d'après Shelley Pouvoirs, dans son Une Liste Outre L'Article "L'utilisation du format SVG pour Flexible, Évolutive et le Plaisir de Milieux: Partie I" et "Partie II"- que le CSS n'est pas actuellement le mieux adapté au positionnement de SVG. En fait, il semble être tout à fait un champ de mines à intégrer du SVG dans une page web, sans en faire directement l'intégrer dans le code html lui-même.
J'espère qu'il y a des solutions à trouver, et, en effet, les Pouvoirs d'offrir un couple de solutions de contournement, afin de permettre une séparation adéquate de style et de contenu pour le format SVG. J'avais spéculer que les problèmes actuels sont la relative nouveauté du concept/standard (par rapport, par exemple,
.gif
ou même.png
...), malheureusement.Je suis désolé je ne peux pas offrir une meilleure réponse. =/
Utiliser les css de positionnement:
index.html
style.css
polygone r="7" id="map_points_55" points="23,10 15,27 34,16 10,16 31,27" style="fill:lime;avc:violet;stroke-width:0;remplissez-la règle:non nulle;"
si vous souhaitez déplacer l'étoile puis ajouter à plus de 10 points comme points="33,20 25,37 44,26 20,26 41,37"
Je vous préviens je suis un parent débutant, mais que dire de "x" et "y" et l'attribution de ces avec le numéro et le "px"
peut-être:
ou
et
Exemple: