CSS inline-block wrap问题,包含混合文本和空div

时间:2015-12-22 18:01:21

标签: html css css3 display

设置div时,我有display: inline-block s(混合为空或带文本)的对齐问题。有关示例,请参见下图:

See alignment issue

正如您所看到的,带有文本的div以某种方式与div的其余部分不对齐。有关我的问题的实例,请参阅this JSFiddle。

我已经知道解决这个问题的一些方法,但我想了解它为什么会发生。我的目标是用最少的CSS更改来解决这个问题(可能没有HTML修改)。

HTML

<div class="bar">
  <div class="actors">
    <div class="actor" style="background-image: url('http://lorempixel.com/32/32/')"></div>
    <div class="actor" style="background-image: url('http://lorempixel.com/32/32/')"></div>
    <div class="actor num"><span>5</span></div>
    <div class="actor" style="background-image: url('http://lorempixel.com/32/32/')"></div>
    <div class="actor num"><div>6</div></div>
  </div>
  <div class="lol">lol</div>
</div>

CSS

.bar {
  height: 40px;
  border-bottom: 1px solid #000;
}
.actors {
  float: left;

}
.actor {
  display: inline-block;
  width: 34px;
  height: 34px;

  background-color: gray;
  border-radius: 16px;
  border: 1px solid red;
}
.num {

}
.lol {
  float: right;
}

2 个答案:

答案 0 :(得分:3)

原因是vertical-align的默认值,每个文本都有。它具有初始值baseline,因此方向在基线上。

最简单,最明智的解决方法是将其设置为vertical-align: top;

.actor {
    vertical-align: top;
}

演示:JSFiddle

答案 1 :(得分:1)

我更愿意使用

.actor {
    vertical-align: middle;
 }

top修复了你的问题,但是它将它们全部推到了最前面。底部恰恰相反。从技术上讲,他们仍然以任何一种方式保持一致。那么为什么不在实际中间对齐它们,只是为了防止任何进一步的冲突。

JFiddle