Вы можете комбинировать высоту и трансформировать анимацию, как показано ниже:
.square {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
background-color: black;
border: 1px solid black;
box-sizing:border-box;
width: 100px;
height: 8px;
background-color: rgba(252, 207, 39, .2);
transform: translate(-50%,-50%) skew(-25deg);
transition: all 1s;
}
.square:hover {
transform:translate(-50%,-50%) skew(0deg);
height:100%;
}
body {
margin:0;
}
<div class="square">
</div>
Если вы хотите сохранить эффект перекоса, просто отрегулируйте высоту:
.square {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
background-color: black;
border: 1px solid black;
box-sizing:border-box;
width: 100px;
height: 8px;
background-color: rgba(252, 207, 39, .2);
transform: translate(-50%,-50%) skew(-25deg);
transition: all 1s;
}
.square:hover {
height:100%;
}
body {
margin:0;
}
<div class="square">
</div>
Используя масштаб, вы можете попробовать это (обратите внимание на порядок преобразования)
.square {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
background-color: black;
border: 1px solid black;
box-sizing:border-box;
width: 100px;
height: 100%;
background-color: rgba(252, 207, 39, .2);
transform: translate(-50%,-50%) skew(-25deg) scaleY(0.1);
transition: all 1s;
}
.square:hover {
transform: translate(-50%,-50%) skew(-25deg) scaleY(1);
}
body {
overflow:hidden;
margin:0;
}
<div class="square">
</div>
Еще одна идея с вращением:
.square {
position: absolute;
width: 100px;
height: 100px;
top: 50%;
left: 50%;
background-color: black;
border: 1px solid black;
box-sizing:border-box;
width: 100px;
height: 100%;
background-color: rgba(252, 207, 39, .2);
transform: translate(-50%,-50%) skew(-25deg) rotateX(85deg); /*close to 90deg*/
transition: all 1s;
}
.square:hover {
transform: translate(-50%,-50%) skew(-25deg) rotateX(0deg);
}
body {
overflow:hidden;
margin:0;
}
<div class="square">
</div>