【问题标题】:Vertical align text alongside SVG icon在 SVG 图标旁边垂直对齐文本
【发布时间】:2016-04-10 21:04:36
【问题描述】:

我正在尝试将 SVG 图标与文本对齐。我已经阅读了很多关于如何做到这一点的资料,使用 vertical-align: middle 是最好的选择。

我也能做到,但有一个问题我想要解答。

我看到的所有资源都告诉你把vertical-align: middle 只放在img 元素上。例如

http://codepen.io/johnasp/pen/bqadn/
Vertically align text next to an image?

但在我的特殊情况下,我需要将vertical-align: middle 放在svgspan 元素上。差异非常微妙。但它就在那里。

这是小提琴:

html, body {
    font-size: 32px;
}

.icon {
    height: 64px;
    width: 64px;
    vertical-align: middle;
}

span {
    vertical-align: middle; // Try commenting this line
}
<ul>
  <li>
    <svg viewBox='0 0 16 16' class="icon" >
      <path d="M7.5 1c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5zM7.5 14.5c-3.314 0-6-2.686-6-6s2.686-6 6-6c3.314 0 6 2.686 6 6s-2.686 6-6 6zM8 8v-2h2v-1h-2v-1h-1v1h-2v4h2v2h-2v1h2v1h1v-1h2l-0-4h-2zM7 8h-1v-2h1v2zM9 11h-1v-2h1v2z">
      </path>
    </svg>
    <span>3.4Km</span>
  </li>
</ul>

尝试将垂直对齐的行注释为span 标签,并查看文本会向上移动。

谁能告诉我为什么我需要垂直对齐我的svgspan 标签,而不仅仅是svg,就像在其他地方一样?

【问题讨论】:

  • 当你将其中的一个元素垂直对齐时,为什么 2 个单独的元素会以相同的方式对齐
  • 删除span 也无济于事。我特意放了span 来赋予文本风格。看看我链接的答案。它正在发生

标签: html css svg


【解决方案1】:

您遇到问题的主要原因是您的图标不在 SVG viewBox 的中心位置。

你的viewBox是"0 0 16 16",但是如果你检查它,这个图标实际上占据了"0 1 15 15"。如果您更新 viewBox,它会更好地在线,而无需垂直对齐您的 &lt;span&gt;

html, body {
    font-size: 32px;
}

.icon {
    height: 64px;
    width: 64px;
    vertical-align: middle;
}

span {
}
<ul>
  <li>
    <svg viewBox='0 1 15 15' class="icon" id="foo">
      <path d="M7.5 1c-4.142 0-7.5 3.358-7.5 7.5s3.358 7.5 7.5 7.5c4.142 0 7.5-3.358 7.5-7.5s-3.358-7.5-7.5-7.5zM7.5 14.5c-3.314 0-6-2.686-6-6s2.686-6 6-6c3.314 0 6 2.686 6 6s-2.686 6-6 6zM8 8v-2h2v-1h-2v-1h-1v1h-2v4h2v2h-2v1h2v1h1v-1h2l-0-4h-2zM7 8h-1v-2h1v2zM9 11h-1v-2h1v2z">
      </path>
    </svg>
    <span>3.4Km</span>
  </li>
</ul>

【讨论】:

  • 我实际上是从“icomoon”网站复制了这个图标。不知道如何调试这些问题(虽然我想知道为什么圆圈顶部有空间)。感谢您提供此信息!我想我得学习SVG
  • 您使用的图标被声明为 16x16 单位图标。但是,该图形仅占该 16x16 正方形左上角的 15x15 部分。
  • 添加类似情况,将vertical-align: middle;规则添加到&lt;svg&gt;解决