这里有一段代码展示了我的问题。
在初始情况下,为什么行为会不同?为什么有些情况下,当我们使用
顺便说一句,
.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.
- 有一个固定大小的容器,其中包含一个同样具有固定大小的子元素。
- 存在溢出滚动。
然后我使用缩放变换将子元素缩小一半大小。
- X轴滚动条消失了,因为子元素的宽度为200像素(更准确地说,容器的scrollWidth属性相应缩小)。
- Y轴滚动条仍然存在,容器的scrollHeight属性仍然是原来的值。
我可以理解每个轴的行为,但不知道它们为什么表现不同。
理想情况下,我希望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
是一种不影响布局的视觉效果,因此在所有情况下滚动条都不应该改变。