Зачем классу overlay задавать
transform: scale(1);
если он и так изначально 1?
Зачем задавать классу overlay z-index 1, если абсолютное позиционирование и так идет поверх статического?
Не лучше ли overlay задать ширину и высоту 100%, а не подгонять под размеры .shape .details?
Кстати почему мы подгоняем их под размеры .shape .details, а не контейнера shape?
Итого:
.overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
font-size: 0;
background-repeat: no-repeat;
transition: transform 0.6s ease-out;
}
Против:
.overlay {
position: absolute;
top: 0;
left: 0;
z-index: 1;
width: 310px;
height: 310px;
font-size: 0;
background-repeat: no-repeat;
background-position: 0 0;
outline: 0;
transform: scale(1);
transition: transform 0.6s ease-out;
}
.shape .details на 10 пикселей больше своего контейнера по ширине и высоте в целях выравнивания.
Не лаконичней ли и не гибче ли будет сделать выравнимание при помоще маргинов, дабы каждый раз при изменении ширины и высоты родителя, не менять ширину и высоту детей, а просто подправить маргин, при этом параметры родителя нас волновать не будут и их не надо будет искать?
Итого:
.shape .details {
display: none;
width: 100%;
height: 100%;
margin: 0 5px;
padding-top: 30%;
color: #ffffff;
background-color: rgba(75, 90, 120, 0.9);
}
.shape:hover .overlay {
transform: scale(1.07);
}
Против:
.shape .details {
display: none;
width: 310px;
height: 310px;
padding-top: 60px;
color: #ffffff;
background-color: rgba(75, 90, 120, 0.9);
}