1

我正在使用Element.scrollIntoView(). 滚动工作正常,但同时破坏了我整个页面的布局。以下是演示:

* {
  margin: 0;
  padding: 0;
}

html, body {
  width: 100%;
  height: 100%;
}

.content {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  overflow: hidden;
  background-color: lightgray;
}

ul {
  position: absolute;
  width: 100%;
  height: 300px;
  left: 0;
  bottom: 0;
  background-color: gray;
  overflow-y: scroll;
}

li {
  list-style: none;
}

#div {
  position: absolute;
  width: 100%;
  height: 300px;
  left: 0;
  bottom: -300px;
  background-color: darkgray;
}

button {
  position: absolute;
  right: 0;
  bottom: 0;
}
<div class=content>
  <!-- it's the ul to scroll, staying at the bottom of the page -->
  <ul>
    <li id=li>abc</li>
    <li>def</li>
  </ul>
  <!-- it's the div hidden under the bottom edge of the page -->
  <div id=div>i should stay hidden.</div>
  <button onclick=li.scrollIntoView();>scrollIntoView</button>
</div>

我将 a 隐藏<div>在页面的底部边缘下方。当我scrollIntoView第一次<li>进入<ul>时,隐藏<div>的被拉出。不仅<div>如此,页面的整个内容都被拉高了 300px。

我希望它可以简单地滚动<li><ul>. 为什么会影响整个页面的布局?

4

1 回答 1

0

我想我自己找到了答案。看到这个答案。这是关于锚点的,但scrollIntoView我认为在内部共享相同的机制。

浏览器将尽力确保元素可见。当它在一个容器中时,它会首先将容器滚动到一个能见度最好的位置,因此内容被拉起。

于 2017-04-02T15:56:55.457 回答