如何使用大字体真棒图标使文本垂直居中?

html CSS

猴子村村

2020-04-07

可以说我有一个带有字体真棒图标和一些文本的引导按钮:

<div>
    <i class='icon icon-2x icon-camera'></i>
    hello world
</div>

如何使文字垂直居中?现在,文本与图标的底部边缘对齐:http : //jsfiddle.net/V7DLm/1/

编辑: 我有一个可能的解决方案http : //jsfiddle.net/CLdeG/1/,但感觉有点hacky-引入了额外的p标签,使用了left-left和display:table。也许有人可以建议一种更简单的方法。

第4066篇《如何使用大字体真棒图标使文本垂直居中?》来自Winter(https://github.com/aiyld/aiyld.github.io)的站点

10个回答
卡卡西Near 2020.04.07

好吧,这个问题是几年前问的。我认为技术已经发生了很大变化,并且浏览器的兼容性要好得多。您可以使用vertical-align,但我认为有些可扩展性和可重用性较低。我建议使用flexbox方法。

这是原始海报使用的相同示例,但带有flexbox。它设置单个元素的样式。如果按钮大小由于任何原因而改变,它将继续在垂直和水平方向居中。

.button {
    border: 1px solid #ccc;
    height: 40px;
    margin: 60px;
    padding: 4px;
    display: flex;
    justify-content: space-around;
    align-items: center;
}

示例: JsFiddle

Mandy村村 2020.04.07

使用flexbox时,很难在文本旁边垂直对齐字体很棒的图标。我尝试了边距和填充,但是移动了所有项目。我尝试了不同的折线对齐方式,例如居中,开始,基线等,但无济于事。调整图标的最简便方法是将其包含div设置为position: relative; top: XX;

猴子小小Tony 2020.04.07

对于那些使用Bootstrap 4的人来说很简单:

<span class="align-middle"><i class="fas fa-camera"></i></span>
猪猪西门 2020.04.07

调整图标行高的另一种方法是使用vertical-align属性的百分比通常,0%是底部,而100%是顶部,但是一个人可以使用负值或大于100来创建有趣的效果。

.my-element i.fa {
    vertical-align: 100%; // top
    vertical-align: 50%; // middle
    vertical-align: 0%; // bottom
}
ProJinJinSam 2020.04.07

这对我来说很好。

i.fa {
  line-height: 100%;
}
小小 2020.04.07

尝试将图标设置为 height: 100%

您无需对包装程序进行任何操作(例如,按钮)。

这需要Font Awesome5。不确定它是否适用于较早的FA版本。

.wrap svg {
    height: 100%;
}

请注意,图标实际上是svg图形。

演示版

小胖Stafan 2020.04.07

我99%的时间都在文字旁边使用图标,因此我进行了全局更改:

.fa-2x {
  vertical-align: middle;
}

根据需要将3x,4x等添加到相同的定义。

DavaidTony宝儿 2020.04.07

最简单的方法是将vertical-align css属性设置为middle

i.fa {
    vertical-align: middle;
}
Tony凯 2020.04.07

如果事情没有line-height: inherit;得到解决,那么在存在对齐问题的特定i.fa元素上通过CSS进行简单的操作就可以解决问题。

您还可以可行地使用全局解决方案,由于稍微更高的CSS特异性,它将覆盖FontAwesome的.fa规则,该规则指定了该属性line-height: 1而无需!important

i.fa {
  line-height: inherit;
}

只要确保上述全局解决方案在可能还会使用FontAwesome图标的地方不会引起任何其他问题即可。

十三 2020.04.07

在考虑了所有建议的选项之后,最干净的解决方案似乎是设置所有行的高度和垂直对齐:

参见Jsfiddle演示

CSS:

div {
    border: 1px solid #ccc;
    display: inline-block;
    height: 50px;
    margin: 60px;
    padding: 10px;
}
#text, #ico {
    line-height: 50px;
}

#ico {
    vertical-align: middle;
}

问题类别

JavaScript Ckeditor Python Webpack TypeScript Vue.js React.js ExpressJS KoaJS CSS Node.js HTML Django 单元测试 PHP Asp.net jQuery Bootstrap IOS Android