CSS中SVG的垂直对齐

Posted

技术标签:

【中文标题】CSS中SVG的垂直对齐【英文标题】:Vertical Alignment of SVG in CSS 【发布时间】:2016-06-28 00:14:02 【问题描述】:

我对内联 SVG 对齐有疑问。我创建了一个带有一些文本和 SVG 的按钮。虽然当 SVG 至少与文本一样大时,对齐工作正常,但当 SVG 高度小于文本时,对齐会失败。

我创建了一个带有双色背景按钮的测试用例,以指示中间的确切位置。如果您仔细观察,您会发现第二种情况没有完全对齐,因为 SVG 的高度小于文本的高度。

有没有办法解决这个问题?以其他方式进行(请不要使用 js)?

测试用例:https://goo.gl/KYDKGH

【问题讨论】:

我看不到您在小提琴中描述的问题。您在哪些浏览器中看到问题? Chrome 最新版本。我在 Mac Retina 上。它非常微妙,但它就在那里。 是字体吗?字体在不同的引擎中呈现不同。此外,如果您没有指定字体,您将获得默认字体,该字体因浏览器和操作系统而异。 SVG 是问题而不是文本 【参考方案1】:

jsfiddle 1 - 您可以在容器上使用position:relative,在对象上使用position:absolute,如下所示:

  position: absolute;
  top: 50%;
  -webkit-transform: translateY(-50%);
  -ms-transform: translateY(-50%);
  transform: translateY(-50%);
  left: 0;
  right: 0;
  margin: auto;
  text-align: center;

top: 50% 将对象移动到容器的垂直中心,选取对象的顶部作为参考(而不是其中心),因此transform: translateY 将其向上移动 50% 的距离以使其完全打开容器的中间(对象中心)。

ps:text-align:center; left:0; right:0;margin:auto 用于水平对齐。

jsfiddle 2 - 或者在容器上使用display:flexalign-items 来垂直对齐内容,如下所示:

  display: -webkit-flex; /* Safari */  
  display: flex;
  -webkit-align-items: center; /* Safari 7.0+ */
  align-items: center;
  -webkit-justify-content: center;
  justify-content: center;

ps:justify content 用于水平对齐。

【讨论】:

在第一个解决方案中,如果有背景,它的属性top: 50% 会中断。第二个,完美。 我同意使用top: 50% 的评论不是首选解决方案...

以上是关于CSS中SVG的垂直对齐的主要内容,如果未能解决你的问题,请参考以下文章

垂直对齐 SVG 文本条纹

将 SVG 文本与其他 SVG 对象垂直对齐以使用 Inkscape

如何将 Bootstrap 4 中的 SVG 垂直对齐到行高?

与显示垂直对齐:inline-flex;结合SVG和文本[重复]

css如何使div里面的文字垂直对齐

在 CSS 中垂直对齐和定位父 DIV