370 votes

Comment centrer un SVG dans une div?

J'ai un SVG que j'essaie de centrer dans une div. La div a une largeur de 900px. Le SVG a une largeur de 400px. Le SVG a sa marge-gauche et sa marge-droite définies sur auto. Ne fonctionne pas, il se comporte juste comme si la marge gauche était à 0 (par défaut).

Est-ce que quelqu'un sait quelle est l'erreur ?

662voto

Spadar Shut Points 4673

SVG est en ligne par défaut.

Ajoutez display: block et alors margin: auto fonctionnera comme prévu.

Ou selon votre mise en page, vous pouvez vouloir garder le SVG en ligne et définir text-align: center sur un élément parent à la place.

Comme autre alternative, vous pouvez centrer le SVG en utilisant des mises en page flex ou grid sur l'élément parent.

14 votes

Je suis presque sûr que cela signifie également que text-align: center sur l'élément parent fonctionnera également (en tout cas, cela fonctionne pour moi dans Chrome)

3 votes

Ceci n'a PAS fonctionné pour moi, mais en utilisant 'inline-block' au lieu de 'block', ça a fonctionné. Peut-être que c'était parce que j'ai inséré le SVG dans une td, pas dans un div

0 votes

Si cette réponse ne fonctionne pas pour vous, assurez-vous de ne pas utiliser une largeur définie à 100 % sur votre élément svg.

46voto

Esger Points 93

Les réponses précédentes n'ont pas fonctionné pour moi. Ajouter l'attribut preserveAspectRatio="xMidYMin" à la balise a quand même fonctionné. L'attribut viewBox doit également être spécifié pour que cela fonctionne. Source : Réseau de développeurs Mozilla

32 votes

Mon approche actuelle est flexbox. Il suffit d'ajouter : .container { display: flex; justify-content: center; } Et d'ajouter la classe .container à la div qui contient votre svg.

2 votes

Considérez ajouter une autre réponse avec cette nouvelle approche pour que je puisse voter pour elle. Merci pour votre aide!

39voto

David Points 36

Ayant lu ci-dessus que le svg est inline par défaut, j'ai simplement ajouté ce qui suit à la div:

et ça a fonctionné pour moi.

Les puristes pourraient ne pas aimer (c'est une image, pas du texte) mais à mon avis HTML et CSS se trompent en matière de centrage, donc je pense que c'est justifié.

0 votes

Merci pour cela. Simple et efficace. J'ai passé des heures à m'arracher les cheveux en manipulant viewPort et viewBox. Cela a résolu le problème en quelques secondes. Il suffit d'entourer la chose stupide d'une balise div et de la centrer.

0 votes

@anon58192932 — Vous êtes les bienvenus. C'est stupide de simple, mais satisfaisant de savoir que cela est utile aux autres, étant donné que j'ai moi-même bénéficié de réponses bien plus sophistiquées à mes questions ici.

26voto

Ryan Points 317

Aucune de ces réponses n'a fonctionné pour moi. Voici comment je l'ai fait.

position: relative;
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);

3 votes

Je ne sais pas pourquoi, mais j'ai dû utiliser left: 100%

7voto

Michael Rader Points 1610

Assurez-vous que votre css lit:

margin: 0 auto;

Même si vous dites que vous avez la gauche et la droite définies sur auto, vous pouvez rencontrer une erreur. Bien sûr, nous ne saurions pas car vous ne nous avez pas montré de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X