使用“位置:粘性”保持元素始终在屏幕上

Noi*_*art 5 html css css-position flexbox

我有一个已知高度的容器(高度有时比屏幕长)。

这个容器有一个垂直和水平居中的元素(via flex)。

我希望这个元素总是在屏幕上垂直居中在容器可见部分的块中。

我试过的:

  • position:sticky; top:50% - 然而,这只会让它在容器的下半部分居中。
  • position:sticky; bottom:50% - 然而这只会让它以上半部分为中心
  • position:sticky; top: 50%; bottom:50%;- 它似乎top覆盖bottom所以这就像我第一次尝试top:50%
  • 我尝试设置负值但没有用

这是一个演示:

.container {
  height: 1200px;
  background-color: rgba(0, 0, 0, .7);
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
}
.center-piece {
  background-color: green;
  position: sticky;
  top: 50%;
}
.center-piece2 {
  background-color: steelblue;
  position: sticky;
  bottom: 50%;
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="center-piece">
    #1
  </div>
  <div class="center-piece2">
    #2
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

无论如何要保持它完全居中,同时“始终在屏幕上”,在容器的可见部分,顶部和底部?

这是我的应用程序的截屏视频:https : //www.youtube.com/watch?v=CwYaBgolNHU

“rawr”将是其背后图像的控件。

Mic*_*l_B 1

注意:兼容性因浏览器而异。

根据caniuse.composition: sticky当前主要浏览器(不包括 IE)均支持该功能。

jsFiddle

.container {
  height: 1200px;
  background-color: rgba(0, 0, 0, .7);
  color: white;
  display: flex;
  justify-content: center;
  align-items: center;
}
.center-piece {
  background-color: green;
  position: sticky;
  top: 10px;                         /* 1 */
  bottom: 50%;
  left: 50%;
  transform: translate(-50%,50%);    /* 2 */
}
.center-piece2 {
  background-color: steelblue;
  position: sticky;
  bottom: 10px;                      /* 3 */
  top: 50%;
  left: 50%;
  transform: translate(-50%,-50%);
}
Run Code Online (Sandbox Code Playgroud)
<div class="container">
  <div class="center-piece">#1</div>
  <div class="center-piece2">#2</div>
</div>
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. position: stickytop: 10px当元素到达视口时启动
  2. 居中如何与 CSS 定位和变换属性配合使用
  3. position: stickybottom: 10px当元素到达视口时启动