Comment faire un <svg> élément de dilater ou de se contracter à son conteneur parent?
Le but est d'avoir le <svg>
élément étendre à la taille de son conteneur parent, dans ce cas, un <div>
, n'importe comment grand ou petit que le conteneur peut être.
Le code:
<style>
svg, #container{
height: 100%;
width: 100%;
}
</style>
<div id="container">
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" >
<rect x="0" y="0" width="100" height="100" />
</svg>
</div>
La solution la plus courante à ce problème semble être le réglage de la viewBox
attribut sur la <svg>
élément.
viewBox="0 0 widthOfContainer heightOfContainer"
Toutefois, cela ne semble pas fonctionner dans les cas où les éléments à l'intérieur de la <svg>
élément prédéfini largeur et/ou hauteur. Par exemple, le <rect>
élément, dans le code ci-dessus, a sa largeur et sa hauteur sont explicitement définis.
Donc, la solution évidente est d'utiliser le % de la largeur et de % hauteurs sur ces éléments. Mais cela veut-il encore à faire? Surtout, depuis <img src=test.svg >
fonctionne très bien et se développe/contrats sans aucun problème avec les définir explicitement <rect>
hauteurs et largeurs.
Si des éléments comme <rect>
, et d'autres éléments, comme elle, avaient leurs largeurs et hauteurs définies en pourcentage, est-il un moyen dans Inkscape pour la régler de sorte que tous les éléments de la <svg>
document pourcentage d'utilisation de largeurs, hauteurs, etc.. au lieu de dimensions fixes?
- Enregistrer le svg comme un fichier de référence comme une image, comme <img src="fichier.svg"/> et de cette façon vous pouvez utiliser width:100% ou taille:100%
- Double Possible de Comment puis-je faire une svg à l'échelle avec son conteneur parent?
Vous devez vous connecter pour publier un commentaire.
La
viewBox
n'est pas à la hauteur du conteneur, c'est la taille de votre dessin. Définir votreviewBox
à 100 unités dans la largeur, puis définir votrerect
à 10 unités. Après cela, cependant à grande échelle le SVG, lerect
sera de 10% de la largeur de l'image.0 0 6.82666 6.82666
j'ai donc définir la largeur et la hauteur de l'attribut 6.82666, puis à 100% sur le<svg>
élément en CSS. Il semble fonctionner.Supposons que j'ai un SVG qui ressemble à ceci:
Et je veux le mettre dans un div et de faire remplir le div de réactivité. Ma façon de faire est la suivante:
J'ai d'abord ouvrir le fichier SVG dans une application comme inkscape. Dans Fichier->Propriétés du Document-je régler la largeur du document de 800px et et la hauteur à 600px (vous pouvez choisir d'autres tailles). Puis-je intégrer le SVG dans ce document.
Puis-je enregistrer ce fichier sous un nouveau fichier SVG et obtenir le chemin d'accès des données à partir de ce fichier.
Maintenant en HTML le code qui fait la magie est comme suit:
Remarque que la largeur et la hauteur de SVG sont toutes les deux à 100%, car nous le voulons pour remplir le contenant à la verticale et à l'horizontale ,mais la largeur et la hauteur de la viewBox sont les mêmes que la largeur et la hauteur du document dans inkscape qui est de 800px X 600px. La prochaine chose que vous devez faire est de définir la preserveAspectRatio à "none". Si vous avez besoin d'avoir plus d'informations sur cet attribut voici un bon lien. Et c'est tout là est à lui.
Une chose, c'est que ce code fonctionne sur presque tous les principaux navigateurs, même les anciens mais sur certaines versions d'android et ios, vous devez utiliser certaines javascrip/jQuery code de garder sa cohérence. J'utilise la suite dans le document de prêt et de redimensionner les fonctions:
Espère que cela aide!
Ce qui est travaillé pour me récemment est de supprimer tous les
height=""
etwidth=""
attributs de la<svg>
tag et toutes les balises enfants. Ensuite, vous pouvez utiliser la mise à l'échelle à l'aide d'un pourcentage du conteneur parent de la hauteur ou de la largeur.@robertc a droite, mais vous avez aussi besoin d'avis que
svg, #container
provoque le svg être multipliée de façon exponentielle pour rien, mais 100% (une fois pour#container
et une fois poursvg
).En d'autres termes, si j'ai appliqué 50% h/w pour les deux éléments, c'est en fait de 50% de 50%, ou .5 * .5, ce qui équivaut à .25, ou 25% de l'échelle.
Un sélecteur fonctionne très bien lorsqu'il est utilisé comme @robertc suggère.
svg, #container
correspond à deux lesvg
élément du dom et le#container
élément du dom. Je crois que vous étiez à la place recherche poursvg #container
, mais la spécification d'un parent n'est pas nécessaire si vous utilisez un ID de toute façon.Pour votre iphone que Vous pourriez utiliser dans votre tête balise :