如何使文字与图标字体垂直对齐?


71

我有一个非常基本的HTML,其中混合了纯文本和图标字体。问题在于图标的渲染高度与文本的高度不同:

<div class="ui menu">
  <a href="t" class="item"><i class="large home basic icon"></i><span class="nav-text"> Accueil</span></a>
  <a href="" class="item"><i class="large camera retro icon"></i><span class="nav-text"> Créations</span></a>
  <a class="item"><span class="nav-text">Qui-suis je </span><i class="large help basic icon"></i></a>
</div>

在此处输入图片说明

有什么建议可以解决吗?


Answers:


87

在这种情况下,由于您正在使用inline-level元素,因此可以添加vertical-align: middlespan元素中以进行垂直居中:

.nav-text {
  vertical-align: middle;
}

另外,您可以将display父元素的flex设置align-itemscenter,并设置为垂直居中

.menu {
  display: flex;
  align-items: center;
}

1
从这个问题看来,他似乎想使图标与文本对齐,而不是文本与图标对齐。
Arbel 2014年

3
@Arbel我不确定-标题说:“用图标对齐文本” ..虽然本质上是相同的。
Josh Crozier 2014年

@Arbel好吧,如果我需要基线或中心对齐,我忘了写,但是这两个建议都提供了比我最初的观点更为清晰的结果,因此我认为您的两个答案都是好的。
Fractaliste 2014年

51

这里已经有了一些答案,但是我发现flexbox是最干净,最少的“ hacky”解决方案:

parent-element {
  display: flex;
  align-items: center;
}

要支持Safari <8,Firefox <21和Internet Explorer <10(使用此polyfill支持IE8 + 9),您需要供应商前缀:

parent-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}

非常简单明了的方式
zulkarnain shah,

是否打算将此规则应用于a元素?如果是,则您正在更改display链接的,因此它将把一个内联元素转换为一个块。我不同意这是最好的解决方案。
Gorzas

@Gorzas在这种情况下,我相信您可以使用inline-flex而不是flex
Moon Cheesez

28

vertical-align 可以取一个单位值,因此您可以在需要时使用该值:

{
  display:inline-block;
  vertical-align: 5px;
}

{
  display:inline-block;
  vertical-align: -5px;
}

3
我尝试了以上所有建议,但只有您的建议有效。谢谢
HungNM2 '18

5

将此添加到您的CSS:

.menu i.large.icon,
.menu i.large.basic.icon {
    vertical-align:baseline;
}

演示



3

设置line-height为图片的垂直大小,然后按vertical-align:middleJosh所说的做。

因此,如果画面20px,你会

{
line-height:20px;
font-size:14px;
vertical-align:middle;
}

据我了解,我应该将您的CSS代码应用于<a>代码吗?
Fractaliste 2014年

<span>是一个内联元素,您可能要使用像<div>这样的块元素,因为<span>对调整CSS的大小感到奇怪。此处的关键是使文本元素与图片大小相同,否则中心将偏移
Marian

严重误读,是的,您也可以在<a>标记上进行操作,发生相同的事情,line-height =元素高度,这将使所有内容完美对齐
Marian Udrea 2014年

1

添加到跨度

vertical-align:baseline;

不是为我工作,而是

vertical-align:baseline;
vertical-align:-webkit-baseline-middle;

确实有效(在Chrome上测试)


0

您可以使用此属性: vertical-align:middle;

.selector-class { 
    float:left;
    vertical-align:middle; 
} 

0

使用CSS网格

的HTML

<div class="container">
    <i class="fab fa-5x fa-file"></i>
    <span>text</span>
</div>

的CSS

.container {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
}

工作实例


0

为了扩展玛丽安·乌德里亚Marian Udrea)的答案:在我的场景中,我试图将文本与实体图标对齐。材质图标有些奇怪,无法对齐。在我将vertical-align图标添加到icon元素(而不是父元素)之前,没有任何答案有效。

因此,如果图标24px处于高度:

.parent {
    line-height: 24px; // Same as icon height

    i.material-icons {  // Only if you're using material icons
      display: inline-flex;
      vertical-align: top;
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.