固定div中的溢出div

4

我已经几乎拥有了我想要的。 我希望可以通过滚动来查看

内超出屏幕范围的overflow-y,但一旦溢出发生,它将无法滚动到选项8,导致选项8不可见。 为什么会这样,如何解决?

* {
  margin: 0;
  padding: 0;
}
#fixed {
  width: 300px;
  height: 100%;
  max-height: 345px;
  position: fixed;
  background: #333;
  border: 2px solid #333;
}
#menu {
  background: pink;
  line-height: 25px;
  padding-left: 20px;
}
#scrollable {
  position: absolute;
  height: 100%;
  width: 100%;
  overflow-y: auto;
}

ul {
  list-style: none;
}
ul li a {
  color: white;
  line-height: 40px;
  padding-left: 20px;
  display: block;
}
ul li a:hover {
  background: blue;
}
<div id="fixed">
  <div id="menu">
    Hello
  </div>
  <div id="scrollable">
    <ul>
      <li><a>Option 1</a></li>
      <li><a>Option 2</a></li>
      <li><a>Option 3</a></li>
      <li><a>Option 4</a></li>
      <li><a>Option 5</a></li>
      <li><a>Option 6</a></li>
      <li><a>Option 7</a></li>
      <li><a>Option 8</a></li>
    </ul>
  </div>
</div>

https://jsfiddle.net/3hm1rxut/2/


你为什么想要为#fixed div添加position:fixed? - athi
请查看此链接 https://jsfiddle.net/3hm1rxut/3/ - Arun D
3个回答

13

你需要使用calc()计算出#scrollable div的高度,因为在这个菜单中还占据了一些空间,以便#scrollable不会获得div的100%高度。

height: calc(100% - 30px);

* {
  margin: 0;
  padding: 0;
}
#fixed {
  width: 300px;
  height: 100%;
  max-height: 345px;
  position: fixed;
  background: #333;
  border: 2px solid #333;
}
#menu {
  background: pink;
  line-height: 25px;
  padding-left: 20px;
}
#scrollable {
  position: absolute;
  height: calc(100% - 30px);
  width: 100%;
  overflow-y: auto;
}

ul {
  list-style: none;
}
ul li a {
  color: white;
  line-height: 40px;
  padding-left: 20px;
  display: block;
}
ul li a:hover {
  background: blue;
}
<div id="fixed">
  <div id="menu">
    Hello
  </div>
  <div id="scrollable">
    <ul>
      <li><a>Option 1</a></li>
      <li><a>Option 2</a></li>
      <li><a>Option 3</a></li>
      <li><a>Option 4</a></li>
      <li><a>Option 5</a></li>
      <li><a>Option 6</a></li>
      <li><a>Option 7</a></li>
      <li><a>Option 8</a></li>
    </ul>
  </div>
</div>


0

有多种方法可以解决您的问题。我会这样做:

#scrollable div 上添加一个 padding top,并使 #menu div 绝对定位。为 #menu div 添加一个 z-index,以便它保持在顶部。此外,请确保在所有元素上添加 box-sizing: border-box,以防止超出分配的大小。

* {
  margin: 0;
  padding: 0;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}
#fixed {
  width: 300px;
  height: 100%;
  max-height: 345px;
  position: fixed;
  background: #333;
  border: 2px solid #333;
}
#menu {
  background: pink;
  line-height: 25px;
  padding-left: 20px;
  position: absolute;
  width: 100%;
  z-index: 10;
}
#scrollable {
  position: absolute;
  height: 100%;
  width: 100%;
  overflow-y: auto;
  padding-top: 25px;
}

ul {
  list-style: none;
}
ul li a {
  color: white;
  line-height: 40px;
  padding-left: 20px;
  display: block;
}
ul li a:hover {
  background: blue;
}

0

更改这个

#scrollable {
  position: absolute;
  height: calc(100% - 20px);/* height shall not be 100% but rather (100%) - (half the line-height of li )*/
  width: 100%;
  overflow-y: auto;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接