溢出元素内的粘性元素

Sticky element inside overflow element

我想在以下示例中将 timeline-header 置顶于页面顶部: http://jsfiddle.net/m152usbd/1/

但是由于时间线启用了溢出,sticky 在 timeline-header 上停止工作。

.timeline{
  overflow: auto;
}

.timeline-header{
  position: sticky;
  top: 0;
}

最接近我想要的是: http://jsfiddle.net/ztuf4gjc/1/

但我觉得这不是一个好的解决方案,因为我需要调整页面上的所有其他元素才能使其正常工作,而且我可以预见一些 side-effects 会发生。此外,我只希望时间轴部分在 x-axis 中滚动,而不是整个页面。

有谁知道如何解决这个问题?

更新

根据@a--m 的回答,不幸的是,CSS 可能无法做到这一点。 这是 js 方法:http://jsfiddle.net/cvk43g1o/

如果有人知道如何使用 CSS 执行此操作,请告诉我!

在我看来,您可以将 .timeline-header 的内容复制到 .timeline 中,据我所知,它似乎有效。

position: sticky 在应用于 .timeline-header 时不起作用的原因是因为滚动依赖于它的包含块,并且因为它占据了大部分你实际上看不到的包含块它在 returns 之前移动以相对定位。当 position: sticky 应用于 .timeline 时,包含块要大得多,您可以看到它在整个页面上滚动。

我认为仅使用 CSS 无法实现您的要求:

A stickily positioned box is positioned similarly to a relatively positioned box, but the offset is computed with reference to the nearest ancestor with a scrolling box, or the viewport if no ancestor has a scrolling box.

https://www.w3.org/TR/css-position-3/#sticky-pos

由于父级 timeline 有一个水平滚动条,所以粘性引用这个并且失去了跟踪 window 的能力,如你所愿。在这种情况下 sticky 的限制是无法跟踪两个不同的容器。