ChatGPT解决这个技术问题 Extra ChatGPT

如何将 SVG 居中放在 div 中?

我有一个 SVG,我试图以 div 为中心。 div 的宽度为 900 像素。 SVG 的宽度为 400 像素。 SVG 的 margin-left 和 margin-right 设置为 auto。不起作用,它就像左边距为 0(默认值)一样。

有谁知道错误是什么?


l
l0b0

SVG 默认是内联的。将 display: block 添加到其中,然后 margin: auto 将按预期工作。


很确定这也意味着父元素上的 text-align: center 也可以工作(无论如何它在 Chrome 中对我有用)
这对我不起作用,但使用'inline-block'而不是'block',确实有效。可能是因为我将 SVG 插入了 td,而不是 div
a
aknuds1

以上答案对我不起作用。不过,将属性 preserveAspectRatio="xMidYMin" 添加到 <svg> 标记就可以了。需要指定 viewBox 属性才能使其正常工作。来源:Mozilla developer network


我目前的方法是 flexbox。只需添加:.container { display: flex; justify-content: center; } 并将 .container 类添加到包含您的 svg 的 div 中。
考虑用这种新方法添加另一个答案,这样我就可以投票了。谢谢你的帮助!
D
David

在阅读了上面默认情况下 svg 是内联的之后,我刚刚在 div 中添加了以下内容:

<div style="text-align:center;">

它对我有用。

纯粹主义者可能不喜欢它(它是图像,而不是文本),但在我看来 HTML 和 CSS 搞砸了居中,所以我认为这是合理的。


谢谢你。简单有效。几个小时以来一直在搞乱 viewPort 和 viewBox。这在几秒钟内就成功了。只需将愚蠢的东西包装在 div 中并将其居中即可。
@anon58192932 — 非常欢迎您。它非常简单,但令人满意的是它对其他人有用,因为我从这里对问题的许多更复杂的答案中受益。
R
Ryan

这些答案都不适合我。我就是这样做的。

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

我不知道为什么,但我不得不使用 left: 100%
S
Shishir Arora

上面的答案看起来不完整,因为他们只是从 css 的角度来讨论。

视口中 svg 的定位受两个 svg 属性影响

viewBox:定义svg要覆盖的矩形区域。 preserveAspectRatio:定义了 viewBox wrt viewport 的放置位置以及如果 viewport 发生变化如何拉伸它。

Follow this link from codepen for detailed description

<svg viewBox="70 160 800 190" preserveAspectRatio="xMaxYMax meet">

A
Always Helping

Flexbox 是另一种方法:添加

.container { 显示:弹性;证明内容:中心; }

并将 .container 类添加到包含您的 svg 的 div 中。


不幸的是,Chrome 不喜欢这样。 Safari 喜欢这个。
@SEoF 你能指定 Chrome 不喜欢这个吗?
如果您在容器中弯曲它,Chrome 根本不会显示 SVG。相反,如果您尝试将高度设置为弯曲区域的 100%,则 Safari 不会显示 SVG,除非您在 SVG 加载后执行此操作。基本上,他们是正确的痛苦,并且都为对方的解决方案大惊小怪。我最终不得不在使用 JS 加载 SVG 后添加样式属性(不是一个好的修复)。
像 Chrome 上的魅力一样工作。
J
Joanna Schweiger

我不得不使用

display: inline-block;

A
Arihant Jain

只需将容器视为 flex 并通过 flex 属性将 svg 项居中:

<div classname='icon'>
  <svg>.....</svg>
</div>

.icon{
  display:flex;
  align-items:center;
  justify-content:center;
 }

M
Michael Rader

确保您的 CSS 内容为:

margin: 0 auto;

即使您说您将左右设置为自动,您也可能会出错。当然我们不会知道,因为您没有向我们展示任何代码。


M
Martin Lloyd Jose

你也可以这样做:


N
Nachiket Gohil

将这两行放在您指定的 style.css 类中的 div 中。

   display: block;
   margin: auto;

然后尝试运行它,您将能够看到 svg 现在居中对齐。


E
Employee

如果您使用 bootstrap,请将您的代码放在此 div 之间:

  <div class="text-center ">
  <i class="fa fa-twitter" style="font-size:36px "></i>
  <i class="fa fa-pinterest" style="font-size:36px"></i>
  <i class="fa fa-dribbble" style="font-size:36px"></i>
  <i class="fa fa-instagram" style="font-size:36px"></i>
  </div>

M
Marten

以上答案都不适合我。如果 SVG 来自 Google Icons,请尝试以下操作:

display: inline-block;
width: 24px;
vertical-align: middle;

C
Collin Krawll

对我来说,解决方法是将 margin: 0 auto; 添加到包含 <svg> 的元素上。

像这样:

<div style="margin: 0 auto">
   <svg ...</svg>
</div>

M
Mahdyar

HTML:

<div class="wrap-center">
    <svg width="20px" height="20px"></svg>
</div>

CSS:

.wrap-center {
    display: flex;
    justify-content: center;
    align-items: center;
}

C
Ching Ching

感谢您的回答,但只是补充一下,您可以使用 px 而不是 %

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

您的答案可以通过额外的支持信息得到改进。请edit添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以找到有关如何写出好答案的更多信息in the help center