.parent{
display:flex;
}
.childA{
padding: 1rem;
width: 20rem;
background: lightblue;
}
.childA:hover {
transform: scale(5);
transform-origin:top left;
z-index:0;
}
.childA:hover + .childB {
transform: translateX(calc(22rem * 4));
}
.childB {
border: solid 1px;
color:white;
padding: 1rem;
background: red;
z-index:1
}
<div class='parent'>
<div class='childA'>Child A scales</div>
<div class='childB'>I want to move when scaled</div>
</div>
Я не уверен, насколько сильно вы хотите его переместить или куда. Вот код, который заставляет его двигаться при наведении вашего масштабаэлемент. Я использую смежный CSS комбинатор, чтобы это произошло. Когда вы наводите курсор на ChildA, соседнему ChildB может быть задан набор свойств.
Что касается того, почему вы должны были поместить z-index в .childB
, было потому, что преобразования создают новый контекст стека. Даже если .childA
предшествует .childB
в вашем HTML, преобразование, по сути, переносит .childA
на новый уровень. Следовательно, вы должны установить z-индекс .childB
.
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/The_stacking_context
Вот некоторые сведения о контексте стека. Очень важно понимать, как они работают и что создает новые.
edit Вы можете рассчитать перевод на основе элемента, который вы зависли, и он будет последовательно перемещаться. Я добавил 2rem к ширине, потому что у вас есть 1rem отступа с обеих сторон. 22rem * 4 вместо 5, потому что масштаб (1) = 22rem.