Не удается разобраться с поведением блока
setTimeout(_ => {
bl2.setAttribute('style', `transform: translateX(-50%) scale(2) translateY(100%);`);
}, 1000);
.gl {
position: relative;
width: 500px;
aspect-ratio: 1;
background: blue;
}
.ff {
position: absolute;
top: -5px; left: 0;
height: 5px; width: 200px;
background: green;
}
.bl2 {
position: absolute;
bottom: 0; left: 200px;
height: 50px; width: 50px;
background: #fc08;
transform: translateX(-50%) translateY(100%);
}
* {
position: relative;
}
<div class='gl' id=gl>
<div>
<div class='bl2' id=bl2>bl2</div>
<div class='ff'></div>
</div>
</div>
Не удается разобраться с поведением блока. Изначально все ровно, все как надо. Но если масштабировать блок. То по оси X все хорошо, по Y все плохо. С этой последовательностью, кажется это не решаемо...
Почему он смещает по Y так, будто на 150% выставлено вместо 100%
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Необходимо помнить, что позиционирование происходит относительно верхнего левого угла элемента. Трансформации же производятся относительно центра (если это не изменено с помощью
transform-origin
) элемента и исходя из его размеров.Повторюсь, порядок трансформаций в свойстве
transform
имеет значение.
setTimeout(_ => {
bl2.setAttribute('style', `transform: translateX(-50%) translateY(100%) scale(2); transform-origin: 50% 0%;`);
}, 1000);
* {
position: relative;
}
.gl {
position: relative;
width: 500px;
aspect-ratio: 1;
background: blue;
}
.ff {
position: absolute;
top: -5px;
left: 0;
height: 5px;
width: 200px;
background: green;
}
.bl2 {
position: absolute;
bottom: 0;
left: 200px;
height: 50px;
width: 50px;
background: #fc08;
transform: translateX(-50%) translateY(100%);
}
<div class='gl' id=gl>
<div>
<div class='bl2' id=bl2>bl2</div>
<div class='ff'></div>
</div>
</div>