主体上带有 flexbox 的粘性页脚和 children
Sticky footer with flexbox on body and children
我想使用带有页眉、部分(由边栏和部分组成)和粘性页脚的简单 flexbox 布局。
我的问题是,当我将 display:flex
应用到正文并且至少应用到一个 child(无论是页眉、部分还是页脚都无关紧要)时,只有 firefox 喜欢我需要。
html, body {
height:100vh;
min-height: 100vh;
}
body {
display: flex;
flex-direction: column;
}
section {
flex: 1;
display: flex;
}
section section {
display: block;
}
<body>
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
</body>
以上代码在 Firefox 中有效,但在 Chrome、Opera、Safari(可能还有更多)中无效。
如果我将 display:flex
应用到正文之后的 <div>
,它在任何地方都有效。
这是一个错误还是 allowed/recommended 在 body-element 上使用 flexbox?
编辑:
这是使用 div 的 alternative-version,它适用于所有浏览器:
html, body {
height:100vh;
min-height: 100vh;
}
div {
display: flex;
flex-direction: column;
}
section {
flex: 1;
display: flex;
}
section section {
display: block;
}
<body><div>
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
</div></body>
当使用视口单位时,不需要在所有项目上设置它,在这种情况下 body
就足够了。另外,删除 height: 100vh
它将正常工作。
注1; div
版本有点工作,但也不完全,因为你没有像 body
那样给它 height
/min-height
。
注2;我在某处读到,当同时使用具有相同值的 height
/min-height
时,它可能会在某些浏览器中出现 wrong/be 错误,这里可能就是这种情况。当我找到它的位置时,我会更新我的答案。
堆栈片段
body {
display: flex;
flex-direction: column;
min-height: 100vh;
}
section {
flex: 1;
display: flex;
}
section section {
display: block;
}
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
已更新;要支持有 min-height
错误的 IE11,请执行以下操作:
html {
display: flex; /* IE bug fix */
}
body {
width: 100%; /* flex row item need this to
take full width */
display: flex;
flex-direction: column;
min-height: 100vh;
}
section {
flex-grow: 1; /* IE need this */
display: flex;
}
section section {
display: block;
}
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
我想使用带有页眉、部分(由边栏和部分组成)和粘性页脚的简单 flexbox 布局。
我的问题是,当我将 display:flex
应用到正文并且至少应用到一个 child(无论是页眉、部分还是页脚都无关紧要)时,只有 firefox 喜欢我需要。
html, body {
height:100vh;
min-height: 100vh;
}
body {
display: flex;
flex-direction: column;
}
section {
flex: 1;
display: flex;
}
section section {
display: block;
}
<body>
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
</body>
以上代码在 Firefox 中有效,但在 Chrome、Opera、Safari(可能还有更多)中无效。
如果我将 display:flex
应用到正文之后的 <div>
,它在任何地方都有效。
这是一个错误还是 allowed/recommended 在 body-element 上使用 flexbox?
编辑: 这是使用 div 的 alternative-version,它适用于所有浏览器:
html, body {
height:100vh;
min-height: 100vh;
}
div {
display: flex;
flex-direction: column;
}
section {
flex: 1;
display: flex;
}
section section {
display: block;
}
<body><div>
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
</div></body>
当使用视口单位时,不需要在所有项目上设置它,在这种情况下 body
就足够了。另外,删除 height: 100vh
它将正常工作。
注1; div
版本有点工作,但也不完全,因为你没有像 body
那样给它 height
/min-height
。
注2;我在某处读到,当同时使用具有相同值的 height
/min-height
时,它可能会在某些浏览器中出现 wrong/be 错误,这里可能就是这种情况。当我找到它的位置时,我会更新我的答案。
堆栈片段
body {
display: flex;
flex-direction: column;
min-height: 100vh;
}
section {
flex: 1;
display: flex;
}
section section {
display: block;
}
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>
已更新;要支持有 min-height
错误的 IE11,请执行以下操作:
html {
display: flex; /* IE bug fix */
}
body {
width: 100%; /* flex row item need this to
take full width */
display: flex;
flex-direction: column;
min-height: 100vh;
}
section {
flex-grow: 1; /* IE need this */
display: flex;
}
section section {
display: block;
}
<header>
<h1>Test Flexbox</h1>
</header>
<section>
<aside>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
<p>Test Test Test</p>
</aside>
<section>
<article>
<h2>Test</h2>
<p>Welome to this flex box test snippet.</p>
</article>
</section>
</section>
<footer>
<p>Here goes the footer, that should always stick to the bottom</p>
</footer>