使用百分比高度容器的溢出



我想创建一个占用全屏幕高度(无滚动条)的页面,但其中有一个可滚动的容器。我尝试使用百分比高度,但是每次百分比彼此使用时都无法工作。

这是我要做的示例。我尝试了许多其他版本,但它们都没有用。

html

<body>
    <div id="pageheader">
        <h1>Header</h1>
    </div>
    <div id="container">
        <div id="header">
            <h2>Section header</h2>
            <p>Header text</p>
        </div>
        <div id="overflower">
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
        </div>
    </div>
</body>

CSS

body {
    height: 100%;
    background: red;
}
#container {
    height: 100%;
    background: green;
}
#overflower {
    overflow: auto;
    height: 100%;
    background: blue;
}

http://jsfiddle.net/rdsx9/

overflower Div应该滚动,而页面的其余部分保持静态,占据了屏幕的整个高度。

嵌套百分比的高度长期以来一直是CSS 2的问题。幸运的是,CSS 3带来了一个有价值的工具,可用于解决此问题(以及类似的问题)一次:。

这个想法很简单:flexbox允许开发人员根据可用的空间来定义部分如何生长或缩小,在这种情况下,可以用来定义overflower DIV应该获得尽可能多的空间在其父母的内部,这将占用父母内部尽可能多的空间...一直到body(设置为占用整个屏幕高度)。

html

<body>
<div id="pagecontainer">
    <div id="pageheader">
        <h1>Header</h1>
    </div>
    <div id="container">
        <div id="header">
            <h2>Section header</h2>
            <p>Header text</p>
        </div>
        <div id="overflower">
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
            <p>Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo.</p>
        </div>
    </div>
</div>
</body>

CSS

body {
    height: 100%;
    margin: 0;
    padding: 0;
}
#pagecontainer {
    display: flex;
    flex-direction: column;
    background: red;
    height: 100%;
}
#pageheader {
    flex: none;
}
#container {
    display: flex;
    flex-direction: column;
    flex: auto;
    background: green;
}
#header {
    flex: none;
}
#overflower {
    overflow: auto;
    flex: auto;
    background: blue;
}

jsfiddle在与body混乱时会做一些奇怪的事情,因此测试此操作的唯一方法是制作单独的HTML文件。请注意,包含div id="pagecontainer-应用display: flex是需要的。如果您在overflow DIV和body之间堆叠更多元素,请确保将3个Flex属性应用于每个属性!

最新更新