如何将我的 svg 图像定位到浏览器的中心

Posted

技术标签:

【中文标题】如何将我的 svg 图像定位到浏览器的中心【英文标题】:How to position my svg image to the center of browser 【发布时间】:2019-12-08 10:52:38 【问题描述】:

我生成了一个简单的 svg 图像并将其加载到 Chrome。打算将它定位到浏览器的中心(即使在浏览器调整大小时),但到目前为止已经失败了。

参考了一些关于viewport/viewbox设置的文章,以及本站(https://***.com/questions/8639383/how-do-i-center-an-svg-in-a-div;https://***.com/questions/13373169/align-svg-to-center-of-screen)上的一些问答,但还没有完成。也许我错过了什么,因为我对此很陌生。

这是此 svg 图片的完整代码:

<svg
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   
   
   viewBox="0 -700 1080 1920"
   preserveAspectRatio="xMidYMid meet"
   version="1.1"
   id="mysvg"
>
  <g
    id="group" >
      <circle
       r="500"
       style="fill:#ffb721;fill-opacity:1"
       cy="0"
       cx="0"
       id="path" />

       <circle
       style="fill:#f71c17;fill-opacity:1;"
       id="path2"
       cx="0"
       cy="0"
       r="250" />
   </g>
</svg>

我希望这张图片可以保持在浏览器的中心,即使在浏览器调整大小时也是如此。

【问题讨论】:

你的意思是在页面上水平和垂直居中吗? 另外,您的圈子不在您的 viewBox 中居中。你是不是只想显示一半的圆圈。如果没有,请附上展示您想要实现的目标的样机图片。 Chrome 只需将文件拖入浏览器即可查看 SVG 文件的输出。如果您希望 SVG 加载到网页中,则必须在网页的 html 中专门调用它。即使这样,您也需要进行一些样式设置以使 SVG 居中。 @Paul:是的,我希望它们水平和垂直居中。我也想展示整个圈子,而不仅仅是一半。显示整个 svg 图像。 @Brad:我不是在尝试制作网页,而只是在拖入浏览器时可以在浏览器中居中的 svg 图像。当我说“加载到 Chrome”时,我的意思是把 svg 文件拖到浏览器中。 【参考方案1】:

我想这就是你想要的? 即使浏览器调整大小和滚动,SVG 也会位于中心

关于全球 CSS

CSS:

#container 
top: 50%;
left: 50%;
position: fixed;
transform: translate(-50%, -50%);

内部 SVG

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 439.29 439.29"  >
    <g id="group">
      <circle cx="219.64" cy="219.64" r="219.64" style="fill: #ffb721" id="path"/>
      <circle cx="219.64" cy="219.64" r="108.32" style="fill: #f71c17" id="path2"/>
    </g>
  </svg>

【讨论】:

感谢您的回答。我应该如何使用这个代码块?我尝试在 (id="mysvg"> ) 部分之后将此块添加到 svg 文件中,但它没有以这种方式工作。 将此添加到您的 css 文件中 @Abraham 我已编辑我的代码如果可行,请尝试该代码 对不起,我尝试使用单独的 css 文件加上 svg 文件修改来添加样式块,但仍然不适用于我的情况。您知道如何仅在一个 svg 文件中实现这一点吗?我想制作这个 svg 文件,而不是网页。谢谢。 @Abraham i edited 我的回答又是你想要什么?如果不是,您只能在 html 元素中调整 SVG 的位置【参考方案2】:

您的 SVG 需要稍作修改才能在 ViewBox 中居中。

body 
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;


.container 
  width: 300px;
  height: 300px;
  background-color: rgba(red, .3);
<div class="container">
<svg
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   
   
   viewBox="-540 -960 1080 1920"
   preserveAspectRatio="xMidYMid meet"
   version="1.1"
   id="mysvg"
>
  <g
    id="group" >
      <circle
       r="500"
       style="fill:#ffb721;fill-opacity:1"
       cy="0"
       cx="0"
       id="path" />

       <circle
       style="fill:#f71c17;fill-opacity:1;"
       id="path2"
       cx="0"
       cy="0"
       r="250" />
   </g>
</svg>
</div>

【讨论】:

嗨,布拉德,我想说,如果仅针对我在问题 (1080 1920) 中列出的固定 viewBox 宽度和高度,您将 viewBox 原点修改为 (-540 -960) 就可以了按我预期的方式工作。你能告诉我如何正确计算这两个数字吗?但是,如果我更改 viewBox 尺寸,那么它就无法工作。关于 body 和 .container 部分,我不确定如何正确使用它们。我试图制作一个 html 文件并将它们放入,但它没有用。此外,我想制作一个 svg 文件,而不是网页。如何在单个 svg 图片文件中实现?

以上是关于如何将我的 svg 图像定位到浏览器的中心的主要内容,如果未能解决你的问题,请参考以下文章

将底部元素定位在垂直中心

如何将 div 弹出对话框定位到浏览器屏幕的中心?

如何创建 .htaccess 来显示 SVG?

如何缩放 SVG 图像以填充浏览器窗口?

使用 onclick 使 svg 图像对象可点击,避免绝对定位

在浏览器中打开 SVG 会呈现 XML 代码而不是图像