利用CSS实现双栏布局的同步滚动

问题描述 投票:0回答:1

我有一个使用 CSS 的两列布局,具有粘性效果,类似于下面提供的示例。但是,滚动行为与我需要的略有不同。

目前,蓝色列首先开始滚动,然后是页面向下 50% 的红色列。然后两列都停在底部。

期望的行为:

我想要相反的效果。初始滚动时,两列(蓝色和红色)应同时滚动,直到红色列达到其内容限制。此时,红色列应停止滚动,而蓝色列继续滚动,直到其内容结束。

问题:

这种同步滚动行为可以使用纯 CSS 来实现吗?

.container {
  display: flex;
  justify-content: space-around;
  align-items: flex-start;
  border: 2px dashed rgba(114, 186, 94, 0.35);
  background: rgba(114, 186, 94, 0.05);
}

.col {
  position: sticky;
  top: 0;
}

.col div {
  height: 250px;
  width: 250px;
  border: 2px dashed rgba(255, 186, 94, 0.35);
  margin-bottom: 20px;
}

.col div:nth-child(2n) {
  opacity: 0.5;
}

.op {
  opacity: 0.7;
}

.col1 div {
    background-color: red;
}

.col2 div {
    background-color: blue;
}
<!DOCTYPE html>
<html lang="en">
<body>
  <div class="container">
    <div class="col col1">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
    <div class="col col2">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
  </div>
  </body>
</html>

html css layout flexbox
1个回答
0
投票

调整第一个项目的对齐方式,将其放置在底部,然后使用底部粘性行为

.container {
  display: flex;
  justify-content: space-around;
  align-items: flex-start;
  border: 2px dashed rgba(114, 186, 94, 0.35);
  background: rgba(114, 186, 94, 0.05);
}

.col {
  margin-top: auto; /* place item at bottom */
  position: sticky;
  bottom: 0; /* instead of top */
}

.col div {
  height: 250px;
  width: 250px;
  border: 2px dashed rgba(255, 186, 94, 0.35);
  margin-bottom: 20px;
}

.col div:nth-child(2n) {
  opacity: 0.5;
}

.op {
  opacity: 0.7;
}

.col1 div {
    background-color: red;
}

.col2 div {
    background-color: blue;
}
<!DOCTYPE html>
<html lang="en">
<body>
  <div class="container">
    <div class="col col1">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
    <div class="col col2">
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
      <div></div>
    </div>
  </div>
  </body>
</html>

© www.soinside.com 2019 - 2024. All rights reserved.