我不敢相信之前没有人注意到这个问题,但似乎没有人注意到这种行为。首先我应该说明这个html是很久以前写的(不是我写的),目前不能修改。
所以问题来了:
我们有这样结构化布局的html:
.rptDisplay {
overflow: auto;
position: relative;
top: 0;
left: 0;
z-index: 0;
margin: 0;
padding: 0;
width: 100%;
height: 200px;
max-height: 100vh;
font-size: 11px;
text-align: left;
}
.rptPositioner {
width: 33%;
display: block;
transform-origin: 0px 0px;
transform: scale(3, 3);
}
.rptHeader {
position: sticky !important;
top: 0 !important;
z-index: 1;
background: #eee;
}
body {
margin: 0;
padding: 0;
}
<div class="rptDisplay">
<div class="rptPositioner">
<div class="rptHeader">Header</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
<div class="row">Row</div>
</div>
</div>
问题在于当我滚动时,页眉下滑的速度与页面本身下滑的速度不同,存在一些非常奇怪的行为。请记住,transform scale 可以被用户更改用于缩放,而 sticky position 是最近添加的。
我追踪到问题出现在 rptDisplay 上没有应用缩放,但应用在 display 的子元素上,是粘性元素的父级。如果我将缩放应用于 display 或 header 上,则问题会消失,但目前这不是一个选项。
我附上了一个 CodePen,展示了我们看到的问题。
scale()
和rotate()
等变换,position:sticky
的行为可能会变得非常奇怪。" - Richard Deeming