当您有不同高度的页面时,如何使页脚位于所有屏幕尺寸的底部?

Posted

技术标签:

【中文标题】当您有不同高度的页面时,如何使页脚位于所有屏幕尺寸的底部?【英文标题】:How to make the footer positioned at the bottom of all screen sizes when you have different height pages? 【发布时间】:2017-05-02 08:10:46 【问题描述】:

我正在尝试制作一个粘性页脚,但由于某种原因它正在播放。 当我在其中一个上设置页脚时,我有几页具有不同内容高度的页面,它会破坏其他页面。 如何为所有页面创建全局样式,以便在页面底部有一个粘性页脚,并且如果不需要它还删除任何滚动,因为我的某些页面需要滚动才能到达页脚,而内容大约有高度。

当我使用一个名为 screen-fly 的网站来测试我的网站以在所有屏幕尺寸上进行测试时,我需要一个能够保证在任何屏幕尺寸上进行响应式设计的解决方案。

我的代码在 plunker 上可用,但是我进行了很多研究并尝试了一些样式解决方案。这是其中的两个

解决方案 1:-

/* **************************************************/
                      /* One solution */
    html, body 
      height:100%;
      min-height:100%;
  
                      /*  navigation style*/
  .navbar-brand 
    margin: 0 auto;
    color:white;
  
  .navbar-inverse 
    background: rgb(14, 78, 114);
  
  .navbar-inverse .navbar-nav>li>a 
    color: #8EE8CD;
  

  /* Content style*/
  .container.content 
    margin-top: 100px;
  

                      /*  footer style*/
  .wrapper 
      position:relative;
      min-height:100%;
  
  footer 
      text-align: center;
      position:absolute;
      bottom:0px;
      width:100%;
      color: white;
     background-color: rgb(14, 78, 114);
  

溶液 2:-

/*   Another solution */

  html, body height: 100%;

  #wrap min-height: 100%;

  #main overflow:auto;
    padding-bottom: 150px;  /* must be same height as the footer */

  #footer position: relative;
    margin-top: -150px; /* negative value of footer height */
    height: 150px;
    clear:both; 

  /*Opera Fix*/
  body:before 
    content:"";
    height:100%;
    float:left;
    width:0;
    margin-top:-32767px;
  

这里是代码的一些链接。

plunker 编辑器:Plunker Editor

plunker 全屏:Plunker Full Screen

我在 screenfly 上的网站:Screenfly Site

【问题讨论】:

你试过display: fixed; bottom: 0; left: 0; right: 0;吗? .container.content margin-top: 100px; 更改为.container.content padding-top: 100px; 非常感谢这里的每一个人,你们真的是一个非常有帮助的社区,但是,Saurav Rastogi 给出了一个非常简单的答案,因为我之前没有使用过 flexbox(一定会看看)我也要感谢 Neil Smith 和 SvenL。 【参考方案1】:

尝试溢出:隐藏;身体。

【讨论】:

【参考方案2】:

这是许多人试图解决的常见问题。在很长一段时间内,它要么需要妥协,要么需要一些 hacky CSS。值得庆幸的是,随着 Flexbox 的出现,它实际上相当容易。检查下面的链接。

https://philipwalton.github.io/solved-by-flexbox/demos/holy-grail/

此页面将介绍如何使用 Flexbox 解决您遇到的问题,并将引导您完成它。

【讨论】:

【参考方案3】:

更改页脚样式

position: absolute;

position: fixed;

希望这是您想要实现的目标:)

【讨论】:

如果内容超过一页,那将无法正常工作,因为页脚会出现在第一页上,并且当你滚动时会一直出现在底部,但我希望它位于内容的末尾仅限。【参考方案4】:

使用 CSS calc() 函数。根据您的 plunkr 示例,将 min-height 赋予.container.content 而不是将min-height 赋予html, body, wrapper

查看更新后的Plunkr


逻辑曾经给min-height

.container.content 
  min-height: calc(100vh - 140px);

在上面的代码中:

vh:视口高度(100vh 给出屏幕总高度) 140px100px 用于页眉 + 20px 用于页脚 + 20px 用于页脚的上边距。

所以我们只是从总视口高度中减去 divs 的其余部分。

【讨论】:

这是我的荣幸@shireefkhatab 非常感谢 Saurav,是的,它现在可以在任何屏幕上运行,这里是 screenfly 链接quirktools.com/screenfly/#u=https%3A//run.plnkr.co/… @shireefkhatab 已修复!再次检查我的答案中的链接。 - quirktools.com/screenfly/#u=https%3A//plnkr.co/… 当你只复制/粘贴全屏链接而不使用编辑器时,它会更好,根本不显示滚动 如果我的所有边距和高度都是百分比或 ems 而不是像素,你能告诉我我是否应该遵循同样的方式。你能给我一个例子吗?赞赏【参考方案5】:

对于这些情况,我会使用 Flexbox。这使您能够完全删除您的包装 div .wrapper

要实现您想要的,只需将以下代码添加到您的 CSS 中

body 
  display: flex;
  flex-direction: column;

并更改页脚 div 的 CSS,在您的情况下将 footer 更改为此

footer 
  margin-top: auto;
  text-align: center;
  color: white;
  background-color: rgb(14, 78, 114);

【讨论】:

我不知道 flexbox 你有链接吗? 当然。关于这个主题有很多很棒的文章,例如this one

以上是关于当您有不同高度的页面时,如何使页脚位于所有屏幕尺寸的底部?的主要内容,如果未能解决你的问题,请参考以下文章

如何使页脚视图始终位于 UITableViewController 的底部?

我如何在底部有页脚的所有屏幕上制作所有相同高度的卡片?

页面内容不足时如何使页脚移至底部

无法使页脚转到页面底部

使页脚留在底部[重复]

调整 uitableview 部分页脚的高度