【发布时间】:2022-02-01 22:12:39
【问题描述】:
我不敢相信以前没有人注意到这一点,但我似乎找不到任何人注意到这种行为。我应该首先说这个 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>
问题是有一些非常奇怪的行为,当我滚动页眉时,页面向下滚动的速度与页面自身向下滚动的速度不同。请记住,用户可以更改变换比例以进行缩放,最近添加了粘性位置。
我将问题归结为缩放未应用到 rptDisplay 而是应用到 display 的子级但粘性元素的父级。如果我将缩放应用到显示器或标题,问题就会消失,但目前这不是一个选项。
我附上了一个 CodePen 来演示我们看到的问题。
【问题讨论】:
-
你不是第一个注意到它的人:#205: Sticky Positioning: How it Works, What Can Break It, and Dumb Tricks | CSS-Tricks - “使用像
scale()和rotate()这样的转换,position:sticky的行为会变得很奇怪”我> -
要添加@RichardDeeming 答案,还要使 .sticky 中的顶部与标题的高度相同。还要添加一个 z-index。
-
您正在为粘性标题创建一个新的坐标系:stackoverflow.com/a/15256339/258174
标签: css positioning sticky