@ dgknca прав в том смысле, что ваш красный div находится впереди. Ваш div не отстает, он просто начинает растягиваться позади других div (обратите внимание, он идет первым в порядке, следовательно, «покрывается» элементами, которые идут после него). Вы можете использовать z-index или изменить порядок элементов:
@keyframes stretchIn {
0% {
height: 50vh;
width: 50vw;
z-index: 0;
}
100% {
height: 100vh;
width: 100vw;
z-index: 1;
}
}
body {
background: #999;
margin: 0;
padding: 0;
overflow: hidden;
}
body .red,
body .blue,
body .green,
body .yellow {
position: absolute;
z-index: 0;
height: 50vh;
width: 50vw;
}
body .red {
top: 0;
left: 0;
background: #a04951;
transition: 1s;
}
body .red:hover {
animation: stretchIn 5s both;
}
body .red .btn {
position: relative;
width: 50px;
height: 50px;
background: #fff;
top: 45%;
left: 45%;
}
body .blue {
background: #c06c84;
top: 0;
right: 0;
}
body .green {
bottom: 0;
left: 0;
background: #6c5b7b;
}
body .yellow {
bottom: 0;
right: 0;
background: #355c7d;
}
<div class="blue"></div>
<div class="green"></div>
<div class="yellow"></div>
<div class="red">
<div class="btn"></div>
</div>