footer自粘底部方法

转载于自己的csdn博客

写界面时几乎每一个界面都会有顶部、中间内容、底部三个部分。
在写底部时,我们总是需要底部总是在最底下的部分。我常常会出现这样的情况:

把一个个盒子按顺序写下去并所写的界面的顶部还有内容部分已经占满了整个页面,所以会很自然的把footer的盒子直接放在前面的盒子后面。

  • 前面内容的盒子足够大,足以撑开元素到浏览器底部时,紧跟在后面的footer盒子也会排在其后不用做任何处理就实现了footer在底部的操作。如下图左所示
  • 前面内容盒子不足以撑起到浏览器底部,如下图右所示,footer的下面大量留白。也就不能起到保持在最底部的作用了。
常见情况

解决方法

1. 适用于footer前面内容较少时的情况

在通过百度后,普遍找到了在css中加入position:absolute; bottom:0;的方法。在测试后发现这个方法在页面有留白的时候是非常好用的。

<!DOCTYPE html>
<html>
<head>
    <style type="text/css">

          *{
            margin: 0;
            padding: 0;
          }

         .header{
            background: yellow;
            width: 100%;
            height: 100px;
         }

         .content{
            background:orange;
            width:100%;
            height:800px;
         }

         .footer{
            background:gold;
            width:100%;
            height:100px;
            position: absolute;
            bottom: 0;
         }
    </style>

</head>


<body>
       <div class="header">
            <h1> header</h1>
       </div>

       <div  class="content">
              <h1>内容</h1>
       </div>

       <div class="footer">
             <h1>footer</h1>
       </div>


</body>
</html>
+absolute bottom
  • 上图左看出。当出现内容盒子不足以占满整个可视区域时。确实是能够使footer始终保持在界面的最底部,即使窗口变大或变小也不会动摇footer的最底部位置。

  • 但随之而来也有一个小问题,当content部分的内容多于页面所能展示内容时,就会发生上图右的情况。content的内容在鼠标未下滑时和图左的显示一样,但是拖到后面的时候却发现,footer硬生生的把content隔开,并遮住了这一部分的内容。

    • 产生这个问题的原因主要还是归咎于absolute的定位问题。
      这个网址非常清晰向我们解释了,position:absolute 中父元素的相关问题。position相对于祖先元素的定位

在设置position:absolute 时,前面没有人为地设置祖先元素。 如果没有这样的祖先元素,则以初始包含块进行定位,而初始包含块并不是以<html>或<body>进行定位的。

对于连续媒体设备(continuous media),初始包含块的大小等于视口viewpor的大小,基点在画布的原点(视口左上角);对于分页媒体(paged media),初始包含块是页面区域(page area)。

position:absolute; bottom:0;的时候也就相当于把footer绝对定位在了获得的视口的底部。这也就是为什么footer会保持在窗口底部,并且在滚动鼠标看后面内容时,footer被固定和漂浮在内容上方的原因了。

</br>
</br>
</br>
以下来自于footer自粘五种方法+我的测试与总结

2.内容部分增加一个min-height:100%

HTML代码

 <div class="header">
            <h1> header</h1>
       </div>

       <div  class="content">
              <h1>内容</h1>

               <div class="push"></div>
       </div>

       <div class="footer">
             <h1>footer</h1>
       </div>

css代码

<style type="text/css">
         *{
            margin: 0;
            padding: 0;
          }

          html,body{
            /*
             *重要部分添加,要给body和HTML初始为100%
             *只有这样在后面用到min-height时才能让content部分盒子足以撑大到浏览器底部。*/
            height:100%;
          }

         .header{
            background: yellow;
            width: 100%;
            height: 100px;
         }

         .content{
            background:orange;
            width:100%;
            /*增加一个min-height,使其大小为100%,即与body同高。*/
            min-height: 100%;
            *height:800px;
         }
         .push,
         .footer{
            *background:gold;
            opacity: 0.5;
            width:100%;
            height:100px;
         }
</style>

代码效果:

代码效果

①body、html的height设置为100%,与视口同高;
②在footer前面定义一个大盒子包裹全部内容,并在大盒子中设置css的min-height为100%,保证足以撑到容器底部。
③在大盒子的底部增加一个类名为push的div,避免覆盖footer的内容。

缺点:
①我们常常需要的底部一般是版权信息,页面内容较少时自然是希望保持在视口的底部。但是因为光是content内容就占满了整个视口,所以footer则必须滚动条下拉才能看到底部内容。

这里写图片描述

②撑破容器了body还有html,可能会对其他的内容产生影响。

3.增加一个内部div(inner-content)使得bottom-padding=(footer)height

html代码

<div class="header">
            <h1> header</h1>
       </div>

       <div  class="content">
          /*增加的inner-content*/
              <div class="inner-content">
                    <h1>内容</h1>
              </div>
       </div>

       <div class="footer">
             <h1>footer</h1>
       </div>
<style type="text/css">
          html,body{
            height:100%;
          }
        /*
         * content保持不变
         */
         .content{
            /*增加一个min-height*/
            min-height: 100%;
         }

         .inner-content{
             background:green;
            opacity:0.2;
            padding: 20px;
            padding-bottom: 100px;
         }
         .footer{
             height:100px;
             margin-top: -100px;
         }
</style>

演示效果:

效果

①优化了方法2,使得内容较少的时候不用翻页去看footer
②删去了方法2中的.push盒子,取而代之的是包裹内容的一个inner-content与footer高度相等的padding-bottom,避免footer覆盖内容。

4.使用calc()计算内容的高度

这是我现在常在使用的方法。
html

<div  class="content">                  
      <h1>content</h1>
 </div>

 <div class="footer">
     <h1>footer</h1>
 </div>

css代码

<style type="text/css">
          html,body{
            height:100%;
          }
         .content{
            /*min-height从100%变成calc(100vh - 70px)*/
            min-height: calc(100vh - 1.00px);
         }

         .inner-content{
             background:green;
            opacity:0.2;
            padding: 20px;
            padding-bottom: 100px;
         }

         .footer{
             height:100px;
         }
</style>

效果

①运用calc(100vh - 其他块的大小)作为min-height,使得即使内容不够撑满窗口时,使得footer 刚好 在视口底部位置。
②删去了push、inner-content这些无实际意义的块。

缺点:
需要计算其他块的高度。

5.使用flexbox

6.使用grid布局

方法5,6待我看完什么是flexbox还有grid~! 未完待续……

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,875评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,569评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,475评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,459评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,537评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,563评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,580评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,326评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,773评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,086评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,252评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,921评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,566评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,190评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,435评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,129评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,125评论 2 352

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,747评论 1 92
  • 转载请声明 原文链接地址 关注公众号获取更多资讯 第一部分 HTML 第一章 职业规划和前景 职业方向规划定位...
    程序员poetry阅读 16,536评论 32 459
  • 少说话不代表会说话 少说话已经成为了一种习惯,这也就意味着:不解释,不辩解,以及很少思考可能带来的反应。 已经吃过...
    罗志琦阅读 215评论 0 2
  • 不知道什么时候大雨开始下起来的 大概是敬酒的时候 大概是我笑的很僵的时候 大概是我真心祝福的时候 大街上这么多 没...
    Zing13阅读 177评论 0 0
  • 3个步骤整合好 那么,我们该怎么道歉呢? 原则就是,3回合道歉法。道歉到第四次和第五次只会让人觉得厌烦。 具体来说...
    Fly_Catkin阅读 507评论 0 0