# SVG移动logo缩放不正确

**URL:** https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474
**Category:** Bug
**Created:** [2023年二月28日 08:28 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474 "2023-02-28T08:28:07Z")
**Posts on this page:** 15
**Page:** 1

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2023年二月28日 08:28 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/1 "2023-02-28T08:28:07Z")

</div>

如果在 mobile\_logo 中使用 SVG，则其缩放不正确：

 ![IMG_7229](https://global.discourse-cdn.com/meta/original/4X/5/0/3/5035af566becbdeb1b2f39533e962964b4d6336a.jpeg)

我现在可以（也将）切换到 PNG，但更希望不要这样做！

假设也可以通过 CSS 调整来修复，但我肯定不是唯一尝试这样做的人。

---

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [2023年二月28日 08:39 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/2 "2023-02-28T08:39:49Z")

</div>

我使用的是 SVG 徽标，没有遇到过缩放问题。也许是我没理解这个问题，是它太小了吗？

我只会注意设置中建议的 3:1 宽高比

 ![Screenshot_20230228_033404](https://global.discourse-cdn.com/meta/original/4X/0/8/5/085391b47359c24a5fd29e8c129eb16a05b4af8a.jpeg)

您的 SVG 图像是否有过多的透明度填充了徽标？

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2023年二月28日 09:19 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/3 "2023-02-28T09:19:52Z")

</div>

它要求纵横比大于 3:1。一个具有相同比例的 PNG 文件可以正常工作，因此此问题专门与 SVG 的处理有关。

作为 SVG 则不行，它是矢量图，在此上下文中没有实际的大小概念。同一个文件作为网站徽标可以正常渲染。

我截图中的图像是在生产网站上发现问题后进行的测试。我创建了一行可比较的文本，将其转换为轮廓并导出了对象。如果文件有问题，网站徽标也会显示出来。没有填充：

 ![Screenshot 2023-02-28 at 3.22.38 AM](https://global.discourse-cdn.com/meta/original/4X/6/9/e/69e9698e8197d9ffff5bc1a45e43ae2c6679b71f.png)

仔细看，您的网站处理 SVG 徽标的方式不同，可能是通过主题：

 ![Screenshot 2023-02-28 at 3.30.26 AM](https://global.discourse-cdn.com/meta/original/4X/0/0/e/00e28e86b38535001a54676a1db475627d83792a.png)

而这个网站运行的是默认设置之一，看起来是这样的：

 ![Screenshot 2023-02-28 at 3.30.33 AM](https://global.discourse-cdn.com/meta/original/4X/1/b/a/1ba4accefbcd23a0bb28f1fffbc94a21a57f327f.png)

看起来您的徽标是由 Inkscape 生成的，并且尺寸已硬编码在文件中。这并非所有 SVG 生成器的典型做法：

 ![Screenshot 2023-02-28 at 3.38.15 AM](https://global.discourse-cdn.com/meta/original/4X/3/a/8/3a81be70855edc25ae57afb0532132a63a16b5d5.png)

对比

![Screenshot 2023-02-28 at 3.38.25 AM](https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/optimized/4X/c/b/2/cb2f6b5f9597851eb4e8517a8ab1eb5fa72f5876_2_690x18.png)

如果它在桌面视图下工作，我们只需要对移动徽标进行类似处理。

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2023年二月28日 11:00 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/4 "2023-02-28T11:00:03Z")

</div>

> [@Stephen](#):
>
> your site

> [@Stephen](#):
>
> Looks like your logo was produced by Inkscape and the dimensions were hard-coded within the file.

你说的是 @piffy 的论坛和 Logo 吗？我在主题中没有找到这些信息，有点令人困惑 🤔

你能提供你的“测试 SVG Logo”让我看一下吗？

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2023年二月28日 13:06 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/5 "2023-02-28T13:06:56Z")

</div>

> [@Canapin](#):
>
> 您是在说 @piffy 的论坛和标志吗？ 我在主题中找不到此信息，这有点令人困惑 🤔

是的——他们提到了他们的网站，所以我将其作为参考进行比较。

元（meta）不允许发布 SVG。 这是来源：

```plaintext

<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 62.88 11.02">
  <defs>
    <style>
      .cls-1 {
        fill: #fff;
      }
    </style>
  </defs>
  <path class="cls-1" d="m1.93,1.04v1.67h1.51v.8h-1.51v3.13c0,.72.2,1.13.79,1.13.28,0,.48-.04.61-.07l.05.79c-.2.08-.53.14-.94.14-.49,0-.89-.16-1.14-.44-.3-.31-.41-.83-.41-1.51v-3.17h-.9v-.8h.9v-1.39l1.03-.28Z" />
  <path class="cls-1" d="m5.15,5.8c.02,1.43.94,2.01,1.99,2.01.76,0,1.21-.13,1.61-.3l.18.76c-.37.17-1.01.36-1.93.36-1.79,0-2.85-1.18-2.85-2.93s1.03-3.13,2.72-3.13c1.9,0,2.4,1.67,2.4,2.73,0,.22-.02.38-.04.49h-4.08Zm3.09-.76c.01-.67-.28-1.71-1.46-1.71-1.07,0-1.54.98-1.62,1.71h3.08Z" />
  <path class="cls-1" d="m10.43,7.44c.31.2.86.42,1.39.42.77,0,1.13-.38,1.13-.86,0-.5-.3-.78-1.08-1.07-1.04-.37-1.54-.95-1.54-1.64,0-.94.76-1.7,2-1.7.59,0,1.1.17,1.43.36l-.26.77c-.23-.14-.65-.34-1.19-.34-.62,0-.97.36-.97.79,0,.48.35.7,1.1.98,1.01.38,1.52.89,1.52,1.75,0,1.02-.79,1.74-2.17,1.74-.64,0-1.22-.16-1.63-.4l.26-.8Z" />
  <path class="cls-1" d="m16.6,1.04v1.67h1.51v.8h-1.51v3.13c0,.72.2,1.13.79,1.13.28,0,.48-.04.61-.07l.05.79c-.2.08-.53.14-.94.14-.49,0-.89-.16-1.14-.44-.3-.31-.41-.83-.41-1.51v-3.17h-.9v-.8h.9v-1.39l1.03-.28Z" />
  <path class="cls-1" d="m21.7,7.44c.31.2.86.42,1.39.42.77,0,1.13-.38,1.13-.86,0-.5-.3-.78-1.08-1.07-1.04-.37-1.54-.95-1.54-1.64,0-.94.76-1.7,2-1.7.59,0,1.1.17,1.43.36l-.26.77c-.23-.14-.65-.34-1.19-.34-.62,0-.97.36-.97.79,0,.48.35.7,1.1.98,1.01.38,1.52.89,1.52,1.75,0,1.02-.79,1.74-2.17,1.74-.64,0-1.22-.16-1.63-.4l.26-.8Z" />
  <path class="cls-1" d="m27,2.71l1.14,3.26c.19.53.35,1.01.47,1.49h.04c.13-.48.3-.96.49-1.49l1.13-3.26h1.1l-2.28,5.8h-1.01l-2.21-5.8h1.13Z" />
  <path class="cls-1" d="m37.24,2.71c-.02.42-.05.89-.05,1.6v3.37c0,1.33-.26,2.15-.83,2.65-.56.53-1.38.7-2.11.7s-1.46-.17-1.93-.48l.26-.8c.38.24.98.46,1.7.46,1.08,0,1.87-.56,1.87-2.03v-.65h-.02c-.32.54-.95.97-1.85.97-1.44,0-2.47-1.22-2.47-2.83,0-1.97,1.28-3.08,2.61-3.08,1.01,0,1.56.53,1.81,1.01h.02l.05-.88h.92Zm-1.09,2.29c0-.18-.01-.34-.06-.48-.19-.61-.71-1.12-1.48-1.12-1.01,0-1.73.85-1.73,2.19,0,1.14.58,2.09,1.72,2.09.65,0,1.24-.41,1.46-1.08.06-.18.08-.38.08-.56v-1.04Z" />
  <path class="cls-1" d="m41.5,0h1.06v8.52h-1.06V0Z" />
  <path class="cls-1" d="m49.58,5.56c0,2.15-1.49,3.08-2.89,3.08-1.57,0-2.78-1.15-2.78-2.99,0-1.94,1.27-3.08,2.88-3.08s2.79,1.21,2.79,2.99Zm-4.61.06c0,1.27.73,2.23,1.76,2.23s1.76-.95,1.76-2.25c0-.98-.49-2.23-1.74-2.23s-1.79,1.15-1.79,2.25Z" />
  <path class="cls-1" d="m55.92,2.71c-.02.42-.05.89-.05,1.6v3.37c0,1.33-.26,2.15-.83,2.65-.56.53-1.38.7-2.11.7s-1.46-.17-1.93-.48l.26-.8c.38.24.98.46,1.7.46,1.08,0,1.87-.56,1.87-2.03v-.65h-.02c-.32.54-.95.97-1.85.97-1.44,0-2.47-1.22-2.47-2.83,0-1.97,1.28-3.08,2.61-3.08,1.01,0,1.56.53,1.81,1.01h.02l.05-.88h.92Zm-1.09,2.29c0-.18-.01-.34-.06-.48-.19-.61-.71-1.12-1.48-1.12-1.01,0-1.73.85-1.73,2.19,0,1.14.58,2.09,1.72,2.09.65,0,1.24-.41,1.46-1.08.06-.18.08-.38.08-.56v-1.04Z" />
  <path class="cls-1" d="m62.88,5.56c0,2.15-1.49,3.08-2.89,3.08-1.57,0-2.78-1.15-2.78-2.99,0-1.94,1.27-3.08,2.88-3.08s2.79,1.21,2.79,2.99Zm-4.61.06c0,1.27.73,2.23,1.76,2.23s1.76-.95,1.76-2.25c0-.98-.49-2.23-1.74-2.23s-1.79,1.15-1.79,2.25Z" />
</svg>

```

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2023年二月28日 13:34 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/6 "2023-02-28T13:34:12Z")

</div>

谢谢！

我能重现这个问题。

桌面端：

 ![image](https://global.discourse-cdn.com/meta/original/4X/2/8/e/28e521bdd7aa73a619680ba22389cad8ab647f9b.png)

移动端：

 ![image](https://global.discourse-cdn.com/meta/original/4X/f/3/b/f3ba0aaad69e499b28dfbf393e757c3f3a18d397.png)

Logo 的大小由以下代码设置：

```plaintext
.d-header .title {
    min-width: 36px;
}

```

如果 SVG 代码中没有硬编码大小，它似乎会被设置为 0。例如，我从 Discourse 的 Logo 中删除了 width 和 height 值，结果如下：

 ![image](https://global.discourse-cdn.com/meta/original/4X/0/1/9/019971b473c9da3b49594d1da908cdefd2597bdb.png)

我不明白为什么在这种情况下它在桌面端却能正常工作。

---

<div class="post-metadata">

### Author: ![Canapin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/canapin/32/119591_2.png) [@Canapin](https://meta.discourse.org/u/Canapin)
#### Post date: [2023年二月28日 14:13 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/7 "2023-02-28T14:13:14Z")

</div>

我试图找出问题所在，我认为我已经解决了。

SVG 位于一个 flexbox 子项 `<a>` 中，该子项默认不会根据内容增长。如果没有为 SVG 文件设置尺寸，它将没有“理由”增长，因此默认宽度为 0px。

如果您允许 logo 的容器增长，就可以解决此问题：

```css
.d-header .title:not(.title--minimized) {
    overflow: hidden;
    flex-grow: 1; // added
}

```

 ![image](https://global.discourse-cdn.com/meta/original/4X/5/1/9/519e72d436d5b661d1fcf5acfd705b2cd5932088.png)

---

<div class="post-metadata">

### Author: ![piffy](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/piffy/32/254198_2.png) [@piffy](https://meta.discourse.org/u/piffy)
#### Post date: [2023年二月28日 15:23 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/8 "2023-02-28T15:23:49Z")

</div>

感谢您详细的分析！我确实使用了 Inkscape。将我的网站置于安全模式会产生相同的 CSS，所以我认为问题不在于主题或插件：

 ![image](https://global.discourse-cdn.com/meta/original/4X/2/c/f/2cf7cfca5406338ea712c86bee5f209a2a20cf8e.png)

无论如何，似乎 CSS 有点误导，SVG 尺寸才是罪魁祸首。通过删除尺寸，我也能够重现您的问题。

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [2023年三月1日 22:44 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/9 "2023-03-01T22:44:37Z")

</div>

我将对此进行更多测试，但这似乎是一个不错的解决方案……感谢您找到它。我对 flex-grow 的主要担忧是它可能如何与有时在主题中添加的同级标题元素交互，但它似乎默认情况下运行良好！

此问题在桌面设备上不会发生，因为我们指定了高度

```css
.d-header #site-logo {
  height: 2.667em;
}

```

在移动设备上，我们假设徽标可能大于可用空间，并限制其以适应：

```css
.d-header #site-logo {
  max-height: 2.4em;
  max-width: 100%;
}

```

因此，桌面上的无单位 SVG 在 CSS 中获得了一个尺寸，而在移动设备上，我们让徽标决定其大小（受 max-height 或 max-width 的限制，以先到者为准）。因此，在没有尺寸且没有指令使其变大的情况下，它会保持很小（如 `.title` 上的 min-width 所规定，没有它它是不可见的！）。

另一种可能的修复方法是将移动徽标的 `max-height` 更新为 `height`。这将与桌面徽标的处理方式一致。

我可能会在明天修复此问题，但在此期间，为 SVG 添加尺寸是一个简单的修复方法，它甚至不必是准确的尺寸……如果您添加 `width="1000"` 而不添加其他任何内容，它将增长以适应空间，并且其最大尺寸将由 CSS 限制。

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2023年三月1日 22:51 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/10 "2023-03-01T22:51:56Z")

</div>

棘手之处在于，生成无量纲 SVG 的应用程序是 Illustrator。我现在只使用了 PNG，很快就会修复。我无法想象让任何人将他们的矢量图扔进文本编辑器进行修改 🤯 哈哈

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [2023年三月1日 23:04 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/11 "2023-03-01T23:04:52Z")

</div>

是的，我猜这正是 SVG 的要点，即_没有_尺寸，但这引入了一个以前图像标签没有的微小复杂性！

如果取消选中 SVG 选项模态框中的响应式框（来自文件 → 导出 → 导出为）：

 ![Screenshot 2023-03-01 at 5.59.47 PM](https://global.discourse-cdn.com/meta/original/4X/6/0/6/6062b57605577df2c99a7adebcd550d1373804e0.png)

（我在导出模态框中遇到的另一个可以避免的问题……如果你直接在页面上将 SVG 图像作为标记嵌入，切换样式到内联也有帮助，否则不同 SVG 的样式可能会冲突，因为它们很可能使用相同的 Illustrator 类名）

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2023年三月2日 02:16 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/13 "2023-03-02T02:16:30Z")

</div>

我可以试着告诉他们这样做是错的，但这仍然无法解释为什么桌面版可以，而移动版不行 ☹

---

<div class="post-metadata">

### Author: ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)
#### Post date: [2023年三月8日 17:56 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/14 "2023-03-08T17:56:54Z")

</div>

我已经在此处合并了一个修复程序，这将解决此问题，并总体上使桌面/移动徽标 CSS 更加一致

> <https://github.com/discourse/discourse/pull/20512>
>
> This ensures all logos have at least one dimension, which fixes an issue with di…mensionless SVGs on mobile being too small, as described here: https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474
> 
> This sets a fixed logo height on mobile, which is consistent with existing desktop styles.
> 
> This also eliminates some unneeded mobile styles, and moves others to common.

---

<div class="post-metadata">

### Author: ![Stephen](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stephen/32/95011_2.png) [@Stephen](https://meta.discourse.org/u/Stephen)
#### Post date: [2023年三月8日 18:00 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/15 "2023-03-08T18:00:22Z")

</div>

太棒了，谢谢 @awesomerobot

---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [2023年三月11日 08:00 UTC](https://meta.discourse.org/t/svg-mobile-logo-scales-incorrectly/256474/17 "2023-03-11T08:00:54Z")

</div>

此主题在 2 天后自动关闭。不再允许回复。
