仅当固定元素的内容超过视口的高度时,才能使它的内容滚动?


94

我有一个div放置fixed在网页的左侧,包含它的菜单和导航链接。它没有从CSS设置高度,内容由高度决定,宽度固定。问题是,如果内容太多,div则将大于窗口的高度,部分内容将不可见。(滚动窗口无济于事,因为位置在fixed,因此div不会滚动。)

我试图进行设置,overflow-y:auto;但这也无济于事,div似乎没有注意到它的一部分在窗口之外。

如果div挂在窗外,如何才能仅使内容滚动(如果需要)?


使用CSS calc()的解决方案可以在这里找到:stackoverflow.com/q/29754195/3168107
Shikkediel 2015年

calc()是一种实验技术,可能导致意外的结果。如果选择使用它,请确保您了解目标受众并在这些浏览器中对其进行测试。
c1moore

遇到相同的问题,并使用类似max-height的方法:calc(100vh-100px); 我的导航栏和填充内容最多达到100px
Zia Ul Rehman Mughal

Answers:



41

下面的链接将演示我是如何做到这一点的。不是很难-只需使用一些聪明的前端开发者即可!!

<div style="position: fixed; bottom: 0%; top: 0%;">

    <div style="overflow-y: scroll; height: 100%;">

       Menu HTML goes in here

    </div>

</div>

http://jsfiddle.net/RyanBrackett/b44Zn/


1
被低估的答案。对于我的用例-外部div样式position: fixed; bottom: 0%; top: 0%; overflow: scroll; height: 100vh;将使外部div可基于内容滚动。
kmgic



3

这对于某些flexbox魔术绝对是可行的。看看这支

您需要这样的CSS:

aside {
  background-color: cyan;
  position: fixed;
  max-height: 100vh;
  width: 25%;
  display: flex;
  flex-direction: column;
}

ul {
  overflow-y: scroll;
}

section {
  width: 75%;
  float: right;
  background: orange;
}

这将在IE10 +中运行


2

这是纯HTML和CSS解决方案。

  1. 我们为导航栏创建一个容器框,其位置为:fixed; 高度:100%;

  2. 然后,我们创建一个高度为100%的内部框;溢出y:滚动;

  3. 接下来,我们将内容放入该框内。

这是代码:

.nav-box{
        position: fixed;
        border: 1px solid #0a2b1d;
        height:100%;
   }
   .inner-box{
        width: 200px;
        height: 100%;
        overflow-y: scroll;
        border: 1px solid #0A246A;
    }
    .tabs{
        border: 3px solid chartreuse;
        color:darkred;
    }
    .content-box p{
      height:50px;
      text-align:center;
    }
<div class="nav-box">
  <div class="inner-box">
    <div class="tabs"><p>Navbar content Start</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content</p></div>
    <div class="tabs"><p>Navbar content End</p></div>
    </div>
</div>
<div class="content-box">
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
  <p>Lorem Ipsum</p>
</div>

链接到jsFiddle:


0

我将其作为解决方法而不是解决方案。这可能并非始终有效。我这样做是因为我在一个非常奇怪的环境中做一个非常基本的HTML页面,供内部使用。我知道有些像MaterializeCSS这样的库可以做非常好的导航栏。(我打算使用它们,但是它不适用于我的环境。)

<div id="nav" style="position:fixed;float:left;overflow-y:hidden;width:10%;"></div>
<div style="margin-left:10%;float:left;overflow-y:auto;width:60%;word-break:break-all;word-wrap:break-word;" id="content"></div>


0

为了您的目的,您可以使用

position: absolute;
top: 0%;

并且仍然可以调整大小,滚动和响应。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.