Обновление
Благодаря @TemaniAfif решение может быть дополнительно оптимизировано путем манипулирования левым и правым полем вместо ширины.
.small {
width: 100px;
margin: 10px;
background-color: #1abc9c;
}
.large {
width: 900px;
margin: 10px;
background-color: #3498db;
}
.target {
background-color: inherit;
}
.target:hover {
margin: 0 -12px;
transform: scaleY(1.2);
transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;
}
<div class="small">
<div class="target">Small</div>
</div>
<div class="large">
<div class="target">Large</div>
</div>
Оригинальный ответ
Функция scale
изменяет размеры элемента путем умножения, но вам необходимо постоянное увеличение по оси x варианта.Вместо этого используйте scale
, используя calc
по ширине прокси-элемента (.target), чтобы добавить постоянный пиксель, когда элемент должен быть увеличен.Увеличивая ширину, положение элемента также нуждается в смещении, чтобы увеличить его влево, поэтому установите left
на отрицательное число, которое составляет половину от общего увеличения.Поскольку высоты двух элементов одинаковы, можно использовать scaleY
для их масштабирования.
.small {
width: 100px;
margin: 10px;
background-color: #1abc9c;
}
.large {
width: 900px;
margin: 10px;
background-color: #3498db;
}
.target {
position: relative;
left: 0;
width: 100%;
background-color: inherit;
}
.target:hover {
left: -12px;
width: calc(100% + 24px);
transform: scaleY(1.2);
transition: transform 0.3s ease-in-out, left 0.3s ease-in-out, width 0.3s ease-in-out;
}
<div class="small">
<div class="target">Small</div>
</div>
<div class="large">
<div class="target">Large</div>
</div>