Вот код, показывающий мою проблему
.container {
width: 200px;
height: 200px;
overflow: auto;
}
.child {
width: 400px;
height: 400px;
/* When scaling down, no more X scrolling because size is 200px, but still Y scrolling :( */
transform: scale(0.5);
/* Both axis working the same (no more scrolling) when absolutely positioned */
/* position: absolute; */
}
/* Irrelevant styling */
.container {
border: 2px solid palevioletred;
position: relative;
}
.child {
background-color: pink;
transform-origin: top left;
}
<div class="container">
<div class="child">
Child
</div>
</div>
Try to scroll down or right within the box.
Я могу немного понять поведение каждой оси, но не почему они действуют по-разному .
В идеале я бы хотел, чтобы ось Y действовала как ось X.
Если я задаю position:absolute
для дочернего элемента, то ось Y действует как ось X ( Обе прокрутки исчезают ).
.container {
width: 200px;
height: 200px;
overflow: auto;
}
.child {
width: 400px;
height: 400px;
position:absolute;
transform: scale(0.5);
}
/* Irrelevant styling */
.container {
border: 2px solid palevioletred;
position: relative;
}
.child {
background-color: pink;
transform-origin: top left;
}
<div class="container">
<div class="child">
Child
</div>
</div>
Try to scroll down or right within the box.
То же самое, когда я установил display:inline-block
. Обе оси ведут себя одинаково ( На оба свитка не влияет масштаб )
.container {
width: 200px;
height: 200px;
overflow: auto;
}
.child {
width: 400px;
height: 400px;
display:inline-block;
transform: scale(0.5);
}
/* Irrelevant styling */
.container {
border: 2px solid palevioletred;
position: relative;
}
.child {
background-color: pink;
transform-origin: top left;
}
<div class="container">
<div class="child">
Child
</div>
</div>
Try to scroll down or right within the box.
Почему в начальном случае у нас другое поведение? И почему в некоторых случаях шкала меняет прокрутку (когда мы использовали position:absolute
), а в других - нет (когда мы использовали display:inline-block
).
В качестве примечания, transform
- это визуальный эффект, который не влияет на макет, поэтому логически прокрутка не должна изменяться во всех случаях.