【问题标题】:Vertical alignment on text and fontawesome icon文本和字体图标的垂直对齐
【发布时间】:2014-12-14 03:45:28
【问题描述】:

我想创建一个带有引导程序的自定义警报框。 但是文本和图标的垂直对齐不起作用。代码如下:

HTML:

<div class="alert-box alert-box-info text-center clearfix" style="display: inline-block;">
     <i class="fa fa-info text-info pull-left"></i>
     <div class="text text-info"><p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p></div>
</div>

CSS:

.alert-box
{
    margin: 20px 0;
    border: 1px solid #dbdbdb;
    display: inline-block;
    height: 100px;
}
.alert-box .fa {
    font-size: 40px;
    padding-left: 20px;
    display: table-cell;
    vertical-align: middle;
}
.alert-box .text {
    margin: 0px;
    display: table-cell;
    width: 100%;
    vertical-align: middle;
}

.alert-box-info
{
    background: #f4f8fa;
    border-bottom: 3px solid #5bc0de;
}
.alert-box-info h4
{
    color: #5bc0de;
}

jsFiddle Demo

谁能告诉我,为什么垂直对齐不起作用,我该如何解决?

【问题讨论】:

  • 垂直对齐只影响包含的对象,不影响对象本身。

标签: css twitter-bootstrap font-awesome


【解决方案1】:

由于the answer to this question,答案已完全更新。


您的布局应该可以通过 flex-box 实现。只需在容器上添加:

display: flex;
align-items:center;

任何与vertical align相关的table相关的东西都应该从所有地方删除。您可以通过在某些元素上强制表格布局来创建所需的布局,但这不是这里的方法,因为您没有真正的表格和表格数据。

注意:我们需要在边缘的小列上显式添加 flex-shrink: 0,因为 Chrome 错误(仅针对 FF 34 修复)会导致不正确的收缩。根据规范,默认情况下不应该发生任何收缩。

演示:

.alert-box
{
    margin: 20px;
	border: 1px solid #dbdbdb;
	display: flex;
    align-items:center;
    height: 100px
}
.alert-box .fa {
	font-size: 40px;
    padding-left: 20px;
    flex-shrink: 0;
}
.alert-box .text {
	margin: 0px;
    flex-grow: 1;
}

.alert-box-info
{
    background: #f4f8fa;
    border-bottom: 3px solid #5bc0de;
}
.alert-box-info h4
{
    color: #5bc0de;
}
.alert-btn {
	flex-shrink: 0;
}
<link href="http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet"/>
<div class="alert-box alert-box-info text-center clearfix">
	<i class="fa fa-info text-info"></i>
	<div class="text text-info"><p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p></div>
    <div class="alert-btn"><a href="google.com" class="btn btn-lg btn-info">Test</a></div>
</div>

【讨论】:

  • 进行了一些更新,使其也适用于小内容。
  • 什么,当我添加另一个表格单元格的按钮时:jsfiddle.net/Zoker/qnj3ohqh/13 该按钮刚刚溢出框
  • 我已将您的问题简化为:jsfiddle.net/qnj3ohqh/16,但现在我要睡觉了。如果我能找出它溢出的原因,我明天会发布更新。另外请删除代码中与表格或垂直对齐相关的所有内容,因为它没有用。
  • 到目前为止,这看起来像是一个浏览器渲染错误。令人惊讶的是,唯一能正确进行计算的是 IE。一个更基本的例子:jsfiddle.net/qnj3ohqh/19
  • 当你发现问题时告诉我:)
【解决方案2】:

最简单的方法是改变div的样式:

<div class="alert-box alert-box-info text-center clearfix" style="display: table-cell;  vertical-align: middle;">

【讨论】:

  • 这是一个 hack...不要在表格之外使用显示表格单元格。
【解决方案3】:

JavaScript 是这里的最佳选择。我为line-height 添加了transition 以实现平滑对齐。

Fiddle

function doMath() {
  document.getElementsByClassName('fa-info')[0].style.lineHeight = document.getElementsByClassName('text')[0].clientHeight + 'px';
}
doMath();
window.onresize = doMath;
.alert-box {
  margin: 20px 0;
  border: 1px solid #dbdbdb;
  display: table;
}
.alert-box .fa {
  font-size: 40px;
  padding-left: 20px;
  display: table-cell;
  transition: line-height 0.1s;
}
.alert-box .text {
  padding: 20px;
  margin: 0px;
  display: table-cell;
  width: 100%;
  vertical-align: middle;
}
.alert-box-info {
  background: #f4f8fa;
  border-bottom: 3px solid #5bc0de;
}
.alert-box-info h4 {
  color: #5bc0de;
}
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet">
<div class="alert-box alert-box-info text-center clearfix" style="display: inline-block;">	<i class="fa fa-info text-info pull-left"></i>

  <div class="text text-info">
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p>
  </div>
</div>

【讨论】:

  • 不需要JS。
【解决方案4】:

如果文本只有 1 行,则垂直对齐文本的最简单方法是 line-height 属性:

.alert-box .fa {
    font-size: 40px;
    padding-left: 20px;
    line-height: 100px;
}

http://jsfiddle.net/Clear/qnj3ohqh/15/

【讨论】:

  • 如果你想要一个“清晰”的解决方案,不要在px中设置一个固定的高度!不要指定高度并在顶部和底部放置填充!
猜你喜欢
  • 2017-04-23
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多