如何在 CSS 之前或之后垂直居中内容

How to vertically center content in before or after in CSS

我目前在重新设计 Bootstrap 警报时遇到了一些麻烦。我认为它与 Font Awesome 无关,也与 Bootstrap 无关。

想法是在 之前添加一个带有图标的块的左侧。它可以工作,但是 图标不是垂直居中的。当右侧包含多行时,它变得更加丑陋。

在两张图片中:

这就是我得到的

这就是我想要的

运行 代码片段,看看我到目前为止取得了什么。

.alert {
  position: relative;
  background: #3498db;
  border: none;
  padding: 15px 20px 15px 120px;
  text-align: left;
}

.alert:before {
  content: "\f129";
  font-family: FontAwesome;
  display: block;
  width: 100px; 
  height: 100%; 
  position: absolute;
  top: 0;
  left: 0;
  background: #34495e;
  text-align: center;
  color: #fff;
  font-size: 2.5em;
  vertical-align: middle;
}
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet"/>
<div class="alert">
  <p>
    Intellectum est enim mihi quidem in multis, et maxime in me ipso.<br /> 
    Ille quidem fructum omnis ante actae vitae hodierno die maximum cepit, cum summo consensu senatus.<br />
    Ex quo profecto intellegis quanta in dato beneficio sit laus.
  </p>
</div>

使用 display: table;table-cell 与垂直对齐一起工作 属性。

.alert {
  background: #3498db;
  border: none;
  text-align: left;
  display: table; /* Display table */
  width: 100%;
}
.alert:before {
  content: "\f129";
  font-family: FontAwesome;
  display: table-cell; /* Display Table-Cell */
  width: 100px;
  background: #34495e;
  text-align: center;
  color: #fff;
  font-size: 2.5em;
  vertical-align: middle;
}
.alert > p {
  padding: 15px 20px 15px 20px;
}
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css" rel="stylesheet" />
<div class="alert">
  <p>
    Intellectum est enim mihi quidem in multis, et maxime in me ipso.
    <br />Ille quidem fructum omnis ante actae vitae hodierno die maximum cepit, cum summo consensu senatus.
    <br />Ex quo profecto intellegis quanta in dato beneficio sit laus.
  </p>
</div>