html - 如何在 svg 圆圈中居中 svg 路径?

我有一个 GitHub Logo 的 svg(取自 Simple Icons)。

我想把这个 svg 放在一个圆圈的中心,所以它看起来像这样:

我已经尝试从 svg 中获取 path 并使用该 path 和一个 circle 创建另一个 svg,例如:

svg {
  padding: 5px;
  fill: none;
  stroke: black;
  stroke-width: 1px;
  stroke-linejoin: round;
}

svg:hover {
  stroke: red;
}
<svg height="90" width="90">
  <circle cx="48%" cy="48%" r="48%" />
  <path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/>
</svg>

但我不知道如何将 path 置于 circle 的中心,我该怎么做?

最佳答案

translate 开始的那一刻
你会继续堆叠<g>团体和translates就像 10 人聚会上的空寿司盘

相反,学习编辑 MDN: SVG paths

选择的工具:SVG 路径编辑器 https://yqnn.github.io/svg-path-editor/

  • 复制/粘贴 d 路径
  • 将精度降低到 0(出于解释目的,但降低精度总是好的)

路径是:

M12 0c-7 0-12 5-12 12c0 5 3 10 8 11c1 0 1 0 1-1c0 0 0-1 0-2c-3 1-4-2-4-2C4 18 4 18 4 18
c-1-1 0-1 0-1c1 0 2 1 2 1c1 2 3 1 4 1c0-1 0-1 1-2c-3 0-6-1-6-6c0-1 1-2 1-3c0 0-1-2 0-3
c0 0 1 0 3 1c1 0 2 0 3 0c1 0 2 0 3 0c2-2 3-1 3-1c1 2 0 3 0 3c1 1 1 2 1 3c0 5-3 6-6 6
c0 0 1 1 1 2c0 2 0 3 0 3c0 0 0 1 1 1C21 22 24 18 24 12c0-7-5-12-12-12
  • 学习 SVG:M 和 m 是移动 C 和 c 是曲线

  • 大写的 M 和 C 是绝对定位点,当我们改变路径时我们不想要它们,因为它们总是停留在绝对位置

  • 在路径编辑器中转换为相对

路径是:

m12 0c-7 0-12 5-12 12c0 5 3 10 8 11c1 0 1 0 1-1c0 0 0-1 0-2c-3 1-4-2-4-2c-1 0-1 0-1 0
c-1-1 0-1 0-1c1 0 2 1 2 1c1 2 3 1 4 1c0-1 0-1 1-2c-3 0-6-1-6-6c0-1 1-2 1-3c0 0-1-2 0-3
c0 0 1 0 3 1c1 0 2 0 3 0c1 0 2 0 3 0c2-2 3-1 3-1c1 2 0 3 0 3c1 1 1 2 1 3c0 5-3 6-6 6
c0 0 1 1 1 2c0 2 0 3 0 3c0 0 0 1 1 1c6-1 9-5 9-11c0-7-5-12-12-12
  • 第一个m12 0 开始绘制位置

  • 在编辑器中我们看到:

    • 左上角为0,0
    • (正方形)图像24 个单位宽
      (SVG 是矢量格式,它们不是像素)
  • 要为圆圈增加空间,图像需要向右移动 6 个单位 并向下移动 6 个单位

  • 这改变了 viewBox="0 0 24 24" 至: viewBox="0 0 30 30"

    • A viewBox="0 0 W H"对您 future 的 SVG 冒险来说是最舒适的。
    • A viewBox="-15 -15 15 15"当您围绕 (0,0) 中心点进行大量绘制时非常有用。
  • 现在不再使用 transform="translate(x y)" ,
    您从 M12 0 更改 d 路径起始位置 至: M15 3

    • new x = x + 6/2 = 12 + 3 = 15

    • new y = y + 6/2 = 0 + 3 = 3

    • 因为它是第一个 路径移动,所以它的m15 3 并不重要或 M15 3

    • 使用额外的 <rect>总能看到 viewBox 的大小

<svg height="90" width="90" viewBox="0 0 30 30">
  <rect width="100%" height="100%" fill="pink"/>
  <circle r="48%" cx="50%" cy="50%" fill="none" stroke-width="1" stroke="red" />
  <path d="M15 3c-7 0-12 5-12 12c0 5 3 10 8 11c1 0 1 0 1-1c0 0 0-1 0-2c-3 1-4-2-4-2c-1 0-1 0-1 0
c-1-1 0-1 0-1c1 0 2 1 2 1c1 2 3 1 4 1c0-1 0-1 1-2c-3 0-6-1-6-6c0-1 1-2 1-3c0 0-1-2 0-3
c0 0 1 0 3 1c1 0 2 0 3 0c1 0 2 0 3 0c2-2 3-1 3-1c1 2 0 3 0 3c1 1 1 2 1 3c0 5-3 6-6 6
c0 0 1 1 1 2c0 2 0 3 0 3c0 0 0 1 1 1c6-1 9-5 9-11c0-7-5-12-12-12"/>
</svg>

最终结果:

  • 更进一步(或巨大的飞跃)是编写 <circle>作为(一部分)d-path
    使用:http://complexdan.com/svg-circleellipse-to-path-converter/

https://stackoverflow.com/questions/66578103/

相关文章:

python - 从 Python 数据框中的整数中检索工作日名称

kubernetes - 将单独的环境变量传递给 statefulset pod

kotlin - 选择随机数但排除特定值

go - 无法将 terraform variables.tf 文件读入可能进入程序

swift - Swift 5 中的 THE.self 是什么?

regex - 如何从日志文件中 grep 错误但过滤掉错误警报?

java - FutureTask get vs run,任务永远不会完成

webpack - 为什么 Tailwind 中的清除选项不适用于 Webpack

c++ - 有没有办法进行编译时检查,一个类的所有成员都在 operator== 中进行比较

vue.js - Primevue Grid 和 Flex 布局无法正确呈现