To place a div (or any block level element) of unknown size containing text, in center of its parent vertically, the following approach can be used.
- First shift top of the div in container center using top:50%. For this element can be either relative or absolute.
- Now shift div by negative 50% of its height using transform:translateY.

Example – div having one line text
<style type="text/css">
.outer {
background-color:lightgray;
width: 100px; height:100px;
}
.box1 {
background-color:green;
position: relative; top:50%;
transform: translateY(-50%);
}
</style>
<div class="outer">
<div class="box1">Some text</div>
</div>Example – div having multiline line text
Same approach will work for multiline text also.
<style type="text/css">
.outer {
background-color:lightgray;
width: 100px; height:100px;
}
.box1 {
background-color:green;
position: relative; top:50%;
transform: translateY(-50%);
}
</style>
<div class="outer">
<div class="box1">Some text that will wrap to next line</div>
</div>