JSFiddle - React, Tailwind, and code Playground

HTML

<!-- Не понятно поведение -->
<div class="parent">
    <div class="child">
        1<br />2
    </div>
</div>

<!-- Понятно поведение -->
<div class="classic">
  <div class="classic-child">
    1<br />2
  </div>
  <div class="spring"></div>
</div>

<!-- Без распорки -->
<div class="classic1">
  <div class="classic-child">
    1<br />2
  </div>
</div>

CSS

.parent {
  position: relative;
  width: 50%;
  //padding: 50% 0 0 0;
  //line-height: 0;
  background: red;
  text-align: center;
}
.child {
  display: inline-block;
  vertical-align: middle;
  color: #fff;
  font-size: 16px;
  line-height: 1.2;
  margin: -100% 0 0 0;
  background: green;
}

.classic1,
.classic {
  height: 300px;
  width: 300px;
  background: green;
  text-align: center;
}
.classic1 {
  background: blue;
}
.classic-child {
  display: inline-block;
  vertical-align: middle;
  background: red;
}
.spring {
  display: inline-block;
  vertical-align: middle;
  height: 100%;
  position: relative;
  
}