如何将SVG置于div中心?

Don*_*n P 227 css layout svg positioning margin

我有一个SVG,我试图以div为中心.div的宽度为900px.SVG的宽度为400px.SVG的margin-left和margin-right设置为auto.不起作用,它只是表现为左边距为0(默认值).

有人知道我的错误吗?

Spa*_*hut 414

SVG默认为内联.添加display: block到它然后margin: auto将按预期工作.

  • 非常肯定这也意味着父元素上的text-align:center也会起作用(无论如何它都适用于Chrome) (8认同)
  • 这对我不起作用,但使用“inline-block”而不是“block”,确实有效。也许是因为我将 SVG 插入到了“td”,而不是“div” (2认同)

Esg*_*ger 26

以上答案对我不起作用.然后将属性添加preserveAspectRatio="xMidYMin"<svg>标记就可以了.该viewBox属性需要被指定为这项工作为好.来源:Mozilla开发者网络

  • 我当前的方法是flexbox。只需添加:`.container {display:flex; 证明内容:中心;}并将.container类添加到包含svg的div中。 (3认同)
  • 考虑使用这种新方法添加另一个答案,以便我可以投票。感谢您的帮助! (2认同)

Dav*_*vid 23

在上面读过svg默认是内联的,我刚刚在div中添加了以下内容:

<div style="text-align:center;">
Run Code Online (Sandbox Code Playgroud)

它为我做了伎俩.

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


Rya*_*yan 18

这些答案都不适合我.这就是我做到的.

position: relative;
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
transform: translateX(-50%);
Run Code Online (Sandbox Code Playgroud)

  • 我不知道为什么,但我不得不使用`left:100%` (2认同)

Shi*_*ora 15

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

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

  1. viewBox:定义要覆盖的svg的矩形区域.
  2. preserveAspectRatio:定义在哪里放置视框WRT视,以及如何在视口中更改STRETCH时它.

请从codepen中获取此链接以获取详细说明

<svg viewBox="70 160 800 190" preserveAspectRatio="xMaxYMax meet">
Run Code Online (Sandbox Code Playgroud)


Esg*_*ger 11

Flexbox 是另一种方法:添加

.container {
  display: flex;
  justify-content: center;
}
Run Code Online (Sandbox Code Playgroud)

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

  • 不幸的是,Chrome 不喜欢这样。Safari 喜欢这个。 (2认同)

Ari*_*ain 9

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

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

.icon{
  display:flex;
  align-items:center;
  justify-content:center;
 }
Run Code Online (Sandbox Code Playgroud)


Nac*_*hil 6

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

   display: block;
   margin: auto;
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*der 5

确保您的 css 显示:

margin: 0 auto;
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我不得不用

display: inline-block;
Run Code Online (Sandbox Code Playgroud)