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

我有一个非常基本的 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>

enter image description here

有什么建议吗?

209656 次浏览

In this scenario, since you are working with inline-level elements, you could add vertical-align: middle to the span elements for vertical centering:

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

Alternatively, you could set the display of the parent element to flex and set align-items to center for vertical centering:

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

Add this to your CSS:

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

DEMO

Set line-height to the vertical size of the picture, then do vertical-align:middle like Josh said.

so if the picture is 20px, you would have

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

to center vertically and horizontally use this:

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);

vertical-align can take a unit value so you can resort to that when needed:

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


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

You can use this property : vertical-align:middle;

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

There are already a few answers here but I found flexbox to be the cleanest and least "hacky" solution:

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

To support Safari < 8, Firefox < 21 and Internet Explorer < 10 (Use this polyfill to support IE8+9) you'll need vendor prefixes:

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

Adding to the spans

vertical-align:baseline;

Didn't work for me but

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

did work (tested on Chrome)

Using CSS Grid

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;
}

Working example

To expand on Marian Udrea's answer: In my scenario, I was trying to align the text with a material icon. There's something weird about material icons that prevented it from being aligned. None of the answers were working, until I added the vertical-align to the icon element, instead of the parent element.

So, if the icon is 24px in height:

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


i.material-icons {  // Only if you're using material icons
display: inline-flex;
vertical-align: top;
}
}