我有以下页面(deadlink:)http://www.workingstorage.com/Sample.htm
,它的页脚位于页面底部,我无法定位。
我想要页脚
- 当页面短且屏幕未填满时,请粘在窗口底部,并且
- 当内容多于内容(而不是内容重叠)时,请停留在文档末尾并照常向下移动。
CSS被继承并迷惑了我。我似乎无法正确更改它以在内容上放置最小高度或使页脚移至底部。
flexbox
。
我有以下页面(deadlink:)http://www.workingstorage.com/Sample.htm
,它的页脚位于页面底部,我无法定位。
我想要页脚
CSS被继承并迷惑了我。我似乎无法正确更改它以在内容上放置最小高度或使页脚移至底部。
flexbox
。
Answers:
一个简单的方法是让身体100%
您的网页,用min-height
的100%
了。如果页脚的高度没有变化,则效果很好。
将页脚的页边距设为负数:
footer {
clear: both;
position: relative;
height: 200px;
margin-top: -200px;
}
box-sizing: border-box;
身体[和#container
]。
我已经开发出一种非常简单的方法来将Footer粘贴在底部,但是作为大多数常用方法,您需要对其进行调整以适合Footer的高度。
html, body{ height:100%; margin:0; }
header{ height:50px; background:lightcyan; }
footer{ height:50px; background:PapayaWhip; }
/* Trick */
body{
display:flex;
flex-direction:column;
}
footer{
margin-top:auto;
}
<body>
<header>Header</header>
<article>Content</article>
<footer>Footer</footer>
</body>
下面的此方法通过在上放置一个::after
伪元素来使用“技巧”,并将其body
设置为具有正确的页脚高度,这样它将占用与页脚完全相同的空间,因此当页脚absolute
位于其上方时,似乎页脚确实占据了空间并消除了其绝对定位的负面影响(例如,遍历身体的内容)
position:absolute
方法:(不允许动态页脚高度)html{ height:100%; }
body{ min-height:100%; padding:0; margin:0; position:relative; }
header{ height:50px; background:lightcyan; }
footer{ background:PapayaWhip; }
/* Trick: */
body {
position: relative;
}
body::after {
content: '';
display: block;
height: 50px; /* Set same as footer's height */
}
footer {
position: absolute;
bottom: 0;
width: 100%;
height: 50px;
}
<body>
<header>Header</header>
<article>Content</article>
<footer>Footer</footer>
</body>
html,body { height: 100%; margin: 0; }
header {
height: 50px;
background: lightcyan;
}
footer {
height: 50px;
background: PapayaWhip;
}
/**** Trick: ****/
body {
display: table;
width: 100%;
}
footer {
display: table-row;
}
<body>
<header>Header</header>
<article>Content</article>
<footer>Footer</footer>
</body>
display: table
display: table-row
display:table-cell
。但是我发现我需要添加body {margin-top: 0; padding-top: 0; margin-bottom: 0; padding-bottom: 0;}
以避免滚动条。您可以通过调整来满足此要求,body:after height
但是我在rem中指定了我的而不是px,所以这成为了问题。
flexbox
一个非常适用于跨浏览器的非常简单的方法是:
http://matthewjamestaylor.com/blog/keeping-footers-at-the-bottom-of-the-page
html,
body {
margin:0;
padding:0;
height:100%;
}
#container {
min-height:100%;
position:relative;
}
#header {
background:#ff0;
padding:10px;
}
#body {
padding:10px;
padding-bottom:60px; /* Height of the footer */
}
#footer {
position:absolute;
bottom:0;
width:100%;
height:60px; /* Height of the footer */
background:#6cf;
}
<div id="container">
<div id="header">header</div>
<div id="body">body</div>
<div id="footer">footer</div>
</div>
我用它来将页脚固定在底部,并且对我有用:
的HTML
<body>
<div class="allButFooter">
<!-- Your page's content goes here, including header, nav, aside, everything -->
</div>
<footer>
<!-- Footer content -->
</footer>
</body>
这是您必须在HTML中进行的唯一修改,并将其添加div
到"allButFooter"
类中。我使用了所有页面,这些页面太短了,我知道页脚不会停留在底部,而且页面足够长,以至于我已经知道必须滚动。我这样做是为了在页面内容是动态的情况下可以正常工作。
的CSS
.allButFooter {
min-height: calc(100vh - 40px);
}
本"allButFooter"
类有一个min-height
依赖于视口的高度值(100vh
指视口高度的100%)和页脚的高度,我已经知道了40px
。
那就是我所做的,并且对我来说效果很好。我没有在所有浏览器中都尝试过,只是在Firefox,Chrome和Edge上尝试过,结果是我想要的。页脚会固定在底部,您无需弄乱z-index,position或任何其他属性。文档中每个元素的位置都是默认位置,我没有将其更改为绝对或固定或其他任何形式。
使用响应式设计
这是我要清除的内容。使用40像素高的Footer时,此解决方案无法按我在使用的响应式设计中的预期工作Twitter-Bootstrap
。我必须修改该函数减去的值:
.allButFooter {
min-height: calc(100vh - 95px);
}
这可能是因为Twitter-Bootstrap
它具有自己的边距和填充,所以这就是我必须调整该值的原因。
我希望这对你们有用!至少,这是一个简单的解决方案,并且不需要对整个文档进行大的更改。
display: none
感谢” 来改变正文中显示的内容。也很简单。
position: fixed; bottom: 0
还有这个。此解决方案是最好的,因为页脚不会停留在底部,而是停留在可滚动页面的末尾。
.footer {max-height: calc(100vh+40px); position: absolute}
。由于它也起作用,因此您应该只知道自己的身体大小。
我使用的一个简单解决方案可在IE8 +上运行
在html上指定min-height:100%,这样,如果内容较少,则静止页面将占据整个视口的高度,并且页脚位于页面底部。当内容增加时,页脚随内容向下移动,并保持在底部。
JS小提琴工作演示:http : //jsfiddle.net/3L3h64qo/2/
html{
position:relative;
min-height: 100%;
}
/*Normalize html and body elements,this style is just good to have*/
html,body{
margin:0;
padding:0;
}
.pageContentWrapper{
margin-bottom:100px;/* Height of footer*/
}
.footer{
position: absolute;
bottom: 0;
left: 0;
right: 0;
height:100px;
background:#ccc;
}
<html>
<body>
<div class="pageContentWrapper">
<!-- All the page content goes here-->
</div>
<div class="footer">
</div>
</body>
</html>
然而,另一个非常简单的解决方案是:
html, body {
height: 100%;
width: 100%;
margin: 0;
display: table;
}
footer {
background-color: grey;
display: table-row;
height: 0;
}
诀窍是使用display:table
整个文档,并display:table-row
与height:0
页脚。
由于页脚是唯一显示为的身体子级,因此将其显示table-row
在页面底部。
height: 100%
那么当视口比例为1/1(正方形)时,它实际上必须是其100%。当视口变宽(横向)时,高度将大于100%,如果变窄(纵向)则将小于100%。因此,高度与窗口的宽度成比例。试图用另一个包装器解决它,但这没有用。有人得到了解决方案或至少是暗示???
要注意的一件事是移动设备,因为它们以“不寻常”的方式实现视口的想法:
因此,使用position: fixed;
(正如我在其他地方所建议的那样)通常不是要走的路。当然,这取决于您要遵循的确切行为。
我使用过的并且在台式机和移动设备上运行良好的是:
<body>
<div id="footer"></div>
</body>
与
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
padding: 0;
margin: 0;
}
#footer {
position: absolute;
bottom: 0;
}
一个非常简单的伸缩解决方案,不假定元素具有固定的高度或位置。
的HTML
<div class="container">
<header></header>
<main></main>
<footer></footer>
</div>
的CSS
.container {
display: flex;
flex-direction: column;
min-height: 100vh;
}
main {
flex: 1;
}
浏览器支持
所有主要浏览器,但IE11及以下版本除外。
确保为适当的前缀使用自动前缀。
做这个
<footer style="position: fixed; bottom: 0; width: 100%;"> </footer>
您还可以阅读有关flex的信息,所有现代浏览器均支持它
更新:我了解了flex并进行了尝试。它为我工作。希望它为您做同样的事情。这是我的实现方式。主要不是ID,而是div
body {
margin: 0;
display: flex;
min-height: 100vh;
flex-direction: column;
}
main {
display: block;
flex: 1 0 auto;
}
在这里您可以阅读有关flex的更多信息https://css-tricks.com/snippets/css/a-guide-to-flexbox/
请记住,旧版本的IE不支持它。
flex-grow: 1
在页脚上方使用某些东西将使页脚正确地位于底部。
我只是在这里回答类似的问题:
我在Web开发领域还很陌生,我知道这已经得到了答案,但这是我找到的最简单的解决方法,我认为这有所不同。我想要一些灵活的东西,因为我的Web应用程序的页脚具有动态高度,因此我最终使用了FlexBox和spacer。
html, body {
height: 100%;
display: flex;
flex-direction: column;
margin: 0px;
}
column
在您需要添加标题,英雄或垂直对齐的任何内容的情况下,我假设我们的应用程序有这种行为。
.spacer {
flex: 1;
}
<html>
<body>
<header> Header </header>
Some content...
<div class='spacer'></div>
<footer> Footer </footer>
</body>
</html>
您可以在这里使用它 https://codepen.io/anon/pen/xmGZQL
这被称为粘性页脚。一个谷歌搜索它来了一个很大的成果。一个CSS粘滞页脚是我已经成功地使用了一个。但是还有更多。
* {
margin: 0;
}
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important;
height: 100%;
margin: 0 auto -4em;
}
.footer, .push {
height: 4em;
}
<html>
<head>
<link rel="stylesheet" href="layout.css" ... />
</head>
<body>
<div class="wrapper">
<p>Your website content here.</p>
<div class="push"></div>
</div>
<div class="footer">
<p>Copyright (c) 2008</p>
</div>
</body>
</html>
我一直在研究这个问题。我已经看到了很多解决方案,每个解决方案都有问题,通常涉及一些不可思议的数字。
因此,使用来自各种来源的最佳实践,我想到了以下解决方案:
http://jsfiddle.net/vfSM3/248/
我要在此处具体实现的目的是使主要内容在绿色区域内的页脚和页眉之间滚动。
这是一个简单的CSS:
html, body {
height: 100%;
margin: 0;
padding: 0;
}
header {
height: 4em;
background-color: red;
position: relative;
z-index: 1;
}
.content {
background: white;
position: absolute;
top: 5em;
bottom: 5em;
overflow: auto;
}
.contentinner {
}
.container {
height: 100%;
margin: -4em 0 -2em 0;
background: green;
position: relative;
overflow: auto;
}
footer {
height: 2em;
position: relative;
z-index: 1;
background-color: yellow;
}
这就是我解决相同问题的方式
html {
height: 100%;
box-sizing: border-box;
}
*,
*:before,
*:after {
box-sizing: inherit;
}
body {
position: relative;
margin: 0;
padding-bottom: 6rem;
min-height: 100%;
font-family: "Helvetica Neue", Arial, sans-serif;
}
.demo {
margin: 0 auto;
padding-top: 64px;
max-width: 640px;
width: 94%;
}
.footer {
position: absolute;
right: 0;
bottom: 0;
left: 0;
padding: 1rem;
background-color: #efefef;
text-align: center;
}
<div class="demo">
<h1>CSS “Always on the bottom” Footer</h1>
<p>I often find myself designing a website where the footer must rest at the bottom of the page, even if the content above it is too short to push it to the bottom of the viewport naturally.</p>
<p>However, if the content is taller than the user’s viewport, then the footer should disappear from view as it would normally, resting at the bottom of the page (not fixed to the viewport).</p>
<p>If you know the height of the footer, then you should set it explicitly, and set the bottom padding of the footer’s parent element to be the same value (or larger if you want some spacing).</p>
<p>This is to prevent the footer from overlapping the content above it, since it is being removed from the document flow with <code>position: absolute; </code>.</p>
</div>
<div class="footer">This footer will always be positioned at the bottom of the page, but <strong>not fixed</strong>.</div>
只需自定义页脚部分
.footer
{
position: fixed;
bottom: 0;
width: 100%;
padding: 1rem;
text-align: center;
}
<div class="footer">
Footer is always bootom
</div>
这是我的两分钱。与其他解决方案相比,不需要添加额外的容器。因此,该解决方案更加优雅。在代码示例下面,我将解释其工作原理。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<style>
html
{
height:100%;
}
body
{
min-height:100%;
padding:0; /*not needed, but otherwise header and footer tags have padding and margin*/
margin:0; /*see above comment*/
}
body
{
position:relative;
padding-bottom:60px; /* Same height as the footer. */
}
footer
{
position:absolute;
bottom:0px;
height: 60px;
background-color: red;
}
</style>
</head>
<body>
<header>header</header>
<footer>footer</footer>
</body>
</html>
因此,我们要做的第一件事就是使最大的容器(html)100%。html页面与页面本身一样大。接下来,我们设置主体高度,它可以大于html标记的100%,但它至少应该一样大,因此我们将最小高度设为100%。
我们还使身体相对。相对表示可以将块元素从其原始位置相对移动。我们在这里不使用它。因为亲戚有第二种用法。任何绝对元素对根(html)或第一个相对父代/祖父母都是绝对的。那就是我们想要的,我们希望页脚相对于身体(即底部)是绝对的。
最后一步是将页脚设置为absolute和bottom:0,将其移动到相对的第一个父/祖父母(课程的主体)的底部。
现在,我们仍然要解决一个问题,当我们填满整个页面时,内容将放在页脚下方。为什么?好吧,因为页脚不再是“ html流”之内,因为它是绝对的。那么我们该如何解决呢?我们将在身体底部添加padding-bottom。这样可以确保身体实际上比其容纳的物体更大。
我希望我对你们说得很清楚。
我遇到的所有CSS方法都太死板了。此外,fixed
如果这不是设计的一部分,则不能将页脚设置为。
经过测试:
假设这种布局:
<html>
<body>
<div id="content"></div>
<div id="footer"></div>
</body>
</html>
使用以下jQuery函数:
$('#content').css("min-height", $(window).height() - $("#footer").height() + "px");
是什么一样被设置min-height
为#content
在窗口高度 - 页脚的高度,什么都可能是当时的。
由于我们使用min-height
,所以如果#content
height超过窗口的高度,则该函数会正常降低性能,并且由于不需要它不会产生任何影响。
实际观看:
$("#fix").click(function() {
$('#content').css("min-height", $(window).height() - $("#footer").height() + "px");
});
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
background: #111;
}
body {
text-align: center;
background: #444
}
#content {
background: #999;
}
#footer {
background: #777;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id="content">
<p>Very short content</p>
<button id="fix">Fix it!</button>
</div>
<div id="footer">Mr. Footer</div>
</body>
</html>
JsFiddle上的相同代码段
我们可以更进一步,使此功能适应动态查看器高度调整,如下所示:
$(window).resize(function() {
$('#content').css("min-height", $(window).height() - $("#footer").height() + "px");
}).resize();
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
background: #111;
}
body {
text-align: center;
background: #444
}
#content {
background: #999;
}
#footer {
background: #777;
width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<html>
<body>
<div id="content">
<p>Very short content</p>
</div>
<div id="footer">Mr. Footer</div>
</body>
</html>
只需将html,body和除行脚以外的其他行设置为100%。例如
<body>
<header></header>
<content></content>
<footer></footer>
CSS变成
html, body, header, content{
height:100%;
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="main.css" />
</head>
<body>
<div id="page-container">
<div id="content-wrap">
<!-- all other page content -->
</div>
<footer id="footer"></footer>
</div>
</body>
</html>
#page-container {
position: relative;
min-height: 100vh;
}
#content-wrap {
padding-bottom: 2.5rem; /* Footer height */
}
#footer {
position: absolute;
bottom: 0;
width: 100%;
height: 2.5rem; /* Footer height */
}
那个怎么样:
<div style="min-height: 100vh;">
content
</div>
<footer>
copyright blah blah
</footer>
我已经在很多项目中使用过,从来没有遇到任何问题:)
供您参考,代码摘录
* {
margin: 0;
}
html, body {
height: 100%;
}
.wrapper {
min-height: 100%;
height: auto !important; /* This line and the next line are not necessary unless you need IE6 support */
height: 100%;
margin: 0 auto -50px; /* the bottom margin is the negative value of the footer's height */
background:green;
}
.footer, .push {
height: 50px; /* .push must be the same height as .footer */
}
.footer{
background:gold;
}
<html>
<head>
<meta charset="utf-8">
<title>Untitled Document</title>
</head>
<body>
<div class="wrapper">
Content Area
</div>
<div class="push">
</div>
<div class="footer">
Footer Area
</div>
</body>
</html>