【问题标题】:left div fixed right div scrollable doesn't work properly左 div 固定右 div 可滚动无法正常工作
【发布时间】:2021-05-08 09:17:35
【问题描述】:

我有一个部分,其中左侧 div 是固定的,右侧 div 是可滚动的,但右侧 div 内容甚至在滚动顶部到达该部分之前滚动。我希望右 div 仅在到达 div 的顶部或 div 的底部时滚动(从底部向上滚动时),但它随时滚动(不一致 - 当我快速滚动时,它开始在该部分的中间滚动,等等)。

当我快速向上或向下滚动时,它甚至会跳过此部分,但我希望它永远不会被跳过

尝试快速和慢速滚动。滚动可以随时工作:

JSFiddle example

代码:

.outer_div {
  display: flex;
  position: relative;
  height: 600px;
  overflow-y: scroll;
  width: 100%;
}

.scroll-content-left {
  position: sticky;
  flex: 1 0 65%;
  top: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.scroll-content-left>div {
  height: 200px;
  width: 400px;
  background-color: black;
}

.scroll-content-right {
  position: relative;
  height: 100%;
  right: 0;
  flex: 1 0 35%;
}
<div style="height: 600px; background-color: blue;"></div>

<div class="outer_div">

  <div class="scroll-content-left">
    <div></div>
  </div>

  <div class="scroll-content-right">
    <div>
      text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>
    </div>
  </div>
</div>

<div style="height: 600px; background-color: yellow;"></div>

【问题讨论】:

  • 你想要的是强制用户在滚动页面外部之前滚动整个&lt;div class="scroll-content-right"&gt;,对吧?
  • @Riccardo 是的。加上窗口只有在到达&lt;div class="outer_div"&gt;的顶部后才能滚动
  • 我无法理解您面临的问题,所以我将描述我所看到的:body 元素(“外部滚动条”)上有一个滚动条,而.scroll-content-right 元素(“内部滚动条”)。微不足道,它们彼此独立:having one doesn't necessitate having the other.,滚动一个不会影响另一个。那么它会随心所欲地滚动是什么意思?你希望一些 js 代码可以工作吗?
  • source.co/how-hydropanels-work @OfirD 如果您查看此网站并向下滚动,您将能够看到我想要的确切功能。 scroll-content-right 仅在滚动顶部到达其 div 的顶部时才开始滚动(对我来说,这个 div 是 outer_div)。但是使用我的代码,如果我滚动得非常快,它只会跳过outer_div(这意味着scroll-content-right 不会滚动。它会跳过它)并滚动到页面底部。如果我滚动得很慢,scroll-content-right 在滚动顶部到达 outer_div 的顶部之前开始滚动。
  • 如果我的回答帮助您解决了您的问题,您能否通过勾选左侧的 V 图标将其标记为已接受?

标签: javascript html jquery css flexbox


【解决方案1】:

如果您想要与您在 cmets 中提供的链接中的效果相同,您必须:

  1. 删除粘性父 div 的 overflow 属性。
  • 这一点值得强调,因为我认为你的预期并非如此,所以:你不能在那里拥有它。如果你想有粘性部分,就没有 CSS 可以让内部滚动条滚动。
  1. 设置粘性 div 的 top 属性。

阅读this great tutorial。根据您的措辞,我认为 认为 scroll-content-leftscroll-content-right div 是“滚动的”,但它们没有;只是scroll-content-left被卡住了。

.outer_div{
  display: flex;
  position: relative;
  height:100%;
  width:100%;
}


.scroll-content-left {
  position: sticky;
  flex: 1 0 65%;
  top: 0;
  display: flex;
  align-items: center;
  justify-content: center;
}

.scroll-content-left > div {
  position: sticky;
  top: 0;
  height: 200px;
  width: 400px;
  background-color: black;
}

.scroll-content-right {
  position: relative;
  height:100%;
  right:0;
  flex: 1 0 35%;
}
<div style="height: 600px; background-color: blue;"></div>
    <div class="outer_div">
        <div class="scroll-content-left"><div>
        </div></div>
        <div class="scroll-content-right">
          <div> text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>text<br>
          </div>
        </div>
    </div>
<div style="height: 600px; background-color: yellow;"></div>

JSFiddle.

【讨论】:

  • 仅设置左侧 div 粘性解决了该问题。非常感谢
【解决方案2】:

body {
  font-family: "Lato", sans-serif; font-size:12px;
}

.sidenav {
  height: 100%;
  width: 160px;
  position: fixed;
  z-index: 1;
  top: 0;
  left: 0;
  background-color: #111;
  overflow-x: hidden;
  padding-top: 20px;
}

.sidenav a {
  padding: 6px 8px 6px 16px;
  text-decoration: none;
  font-size: 25px;
  color: #818181;
  display: block;
}

.sidenav a:hover {
  color: #f1f1f1;
}

.main {
  margin-left: 160px; /* Same as the width of the sidenav */
  font-size: 15px; /* Increased text to enable scrolling */
  padding: 0px 10px;
}
<div class="sidenav">
  <a href="#about">About</a>
  <a href="#services">Services</a>
  <a href="#clients">Clients</a>
  <a href="#contact">Contact</a>
</div>

<div class="main">
 
  <h2>Sidebar</h2>
  <p>This sidebar is of full height (100%) and always shown.</p>
  <p>Scroll down the page to see the result.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus. </p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
</div>

【讨论】:

  • 我不希望总是显示侧边栏。我想要其他 div 中间的“sidenav”和“文本”部分,然后像我链接的 JSFiddle 一样向下或向上滚动时消失。
猜你喜欢
  • 2018-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多