如何垂直对齐文本内的块

问题描述

如何垂直对齐中心 .sub-block-2 元素(如 .sub-block-1)? .sub-block-1 应该是 display=flex .sub-block-2 应该是 display=inline-flex 行为应该与现在相同,除了 .sub-block-1 和 .sub-block-2 应该垂直居中

<div class="wrapper">
  <div class='holder'>
  Some text
    <div class="block">
      <div class="sub-block-1"></div>
    </div>
    <div class="block">
      <div class="sub-block-2"></div>
    </div>
    dsdfsd sdfsdf dsfsdfsdf sdfsdfsdf sdfsdf sdfsdf
  </div>
</div>
.wrapper {
  width: 300px;
}

.holder {
  line-height: 30px;
}

.block {
  display: inline-block;
  vertical-align: middle;
  overflow: hidden;
}

.sub-block-1 {
  display: flex;
  background: #000;
  height: 20px;
  width: 60px;
}

.sub-block-2 {
  display: inline-flex;
  background: #000;
  height: 20px;
  width: 100px;
}

codepen https://codepen.io/ruvi/pen/yLaryJq

解决方法

inline 元素的行高有点时髦。 (thread on how line-height affects inline elements)

line-height: 0; 添加到 .block 将使 sub-block1sub-block2 垂直对齐,但如果 .block 内有任何文本,则它们之间不会有额外的空间线。

.block {
  display: inline-block;
  vertical-align: middle;
  overflow: hidden;
  line-height: 0;
}