CSS + DIV 让页脚始终保持在页面底部

简介: 来源:David's Blog     http://www.DavidQiu.com/ 文章链接:http://blog.davidqiu.com/post/2013-06-17/40051753968   相关参考: http://www.

来源:David's Blog     http://www.DavidQiu.com/

文章链接:http://blog.davidqiu.com/post/2013-06-17/40051753968

 

相关参考:

http://www.cnblogs.com/chenyuming507950417/p/4003651.html

http://www.cnblogs.com/ahjesus/archive/2011/11/26/2263986.html

 

下面是David博客的原文

博主研究了两天多,终于利用 CSS+DIV 让页脚始终在页面的最底部了  T T

 1、利用 bottom 属性?

在实践之前,很容易联想到用 CSS 里面的 bottom 属性让页脚在最下面,可是这个是行不通的。如果使用了如下方法:

footer
{
  bottom: 0px;
}

我可以很诚实地告诉你,写了根没写压根就没区别。因为版面默认用的是 “position: relative;”,这会让版面从上至下地排布,而不能够独立地让 footer 始终在页面的最底部。

 

position: fixed?

那么自然就会想说,那如果用“position: fixed;”属性呢?

footer
{
  position: fixed;
  bottom: 0px;
}

这个也是不行的,因为“fixed”会让 div 相对浏览器,而非页面。那么出现的情况将是无论怎么移动页面,始终都有一个 footer 在浏览器的底部,不甚美观。

 

position: absolute?

那么又想了,如果用“position: absolute”呢?

footer
{
  position: absolute;
  bottom: 0px;
}

这个也是不行的。用了这个属性,会有一种初始化的效果,让 footer 一开始就在浏览器的最底部,然后你拉动页面,它不会落到页面最低部,而是上去了。实际上就是与其他网页内容产生了重叠。这个也是绝对不允许的。

 

 

2、解决方法

在解决的时候,我查了相当多的资料。如果用纯 CSS 的话,似乎都指向一种叫 Sticky Footer的方法。不过网上的基本都是抄来抄去,只有代码,没有解释什么的,我就不吐嘈了。

 

原理解析

这种方法的原理很简单,用到了 2 个属性:min-height 和 margin。

其中,min-height 都有个很奇特的属性值:100%。这个属性值是指当前浏览器窗口的高度,实际上就是能显示的最大高度(一个屏幕的高度)了。那么自然可以联想到,如果将内 容部分设成“min-height: 100%”,就能够将内容部分占有一个屏幕的高度,那么页脚起码会在屏幕的外面。只要稍加改进,便能融入 Header、Content、Footer 这三个部分,并使得 Footer 起码在屏幕的最底部,而且当内容长度增加时,会在页面的最后面,而不至于遮挡内容。

可是要注意的是,“100%”的这个属性对于“height”或者“min-height”来说有点奇怪,它在使用之前貌似要对“100%”的定义进行初始化。而我们知道,“html”这个结点是沾满一个屏幕的,那么就要先写这样的内容:

body, html
{
  height: 100%;
}

一个值得关注的是,如果我们用的是 ASP.NET 框架,因为它是基于 form 的,所以仅仅设置 body 和 html 还不够,还要设置 form 的相应属性

form
{
  height: 100%;
}

 

 

而为了页眉与页脚紧贴浏览器边框,我们还要设置相关的 margin 与 padding 为 0,以防止空隙的出现。而为了简单起见,就对全局所有的容器都设置这样的一个默认值吧。

*
{
  margin: 0;
  padding: 0;
}

好了,到了这里就可以放心地去用“min-height: 100%;”了。

那么怎么解决在内容很少的时候,页脚能够显示在浏览器的最底部,而不是什么情况都被置于一个屏幕的高度之外呢?

可能看到上面的第 2 个我说的要使用的属性,大家就大概明白了。对,就是用 margin 这个属性。不过要声明的一点是,下面的方法用到了一些不太符合规范的方法,就是加多了一个空 div 用作显示格式定制,而其本身不起任何作用。

先看看网页的 html 文本来了解一下框架吧:

<div class="Wrapper">
  <div class="Header"></div>
  <div class="Content"></div>
  <div class="FooterPush"></div>
</div>
<div class="Footer"></div>

可见,页眉与内容都被一个叫“Wrapper”的容器包着,然后在他们后面有个叫“FooterPush”的东西,其实这个就是我之前说的仅用于控制显示格式的空 div 了。然后,Footer 是置于所有内容之外的。

然后我们这样思考:如果 FooterPush 的高度与 Footer 相同,然后 Footer 有一个“margin-top”的属性,它的值是 Footer 的高度的负值,即例如 Footer 的高度是 120px,然后:

.Wrapper .FooterPush
{
  height: 120px;
}
                           
.Footer
{
  margin-top: -120px;
  height: 120px;
}

那么发生的情况将会非常神奇,实际上就是 Footer 刚好就覆盖在 FooterPush 的上面了。那么这个时候,我们只要将 Wrapper 的高度设为“100%”,这样所有的东西就至少能够在一个屏幕内现实完毕了。

这样,就能够达到当内容少时,Footer 最高能够在一个屏幕的最底部显示;而当内容比较长的时候,Footer 能够很乖巧地在所有内容的后面,而不至于遮挡内容。

OK,大工告成了吧!那我就贴个完整些的代码吧。

 

完整代码

Html:

<body>
<form> <!-- 如果用的是 Asp.Net 就可能会有这个结点 -->
  <div class="Wrapper">
    <div class="Header"></div>
    <div class="Content"></div>
    <div class="FooterPush"></div>
  </div>
  <div class="Footer"></div>
</form>
</body>

css

*
{
  margin: 0;
  padding: 0;
}
   
html, body, form
{
  height: 100%;
}
   
.Wrapper
{
  min-height: 100%;
}
   
  .Wrapper .FooterPush
  {
    height: 120px; /* Footer 的高度 */
  }
   
.Footer
{
  clear: both; /* 清除浮动元素格式 */
  position: relative;
  margin-top: -120px; /* Footer 高度的负值 */
  height: 120px;
}

by: David Qiu.

 

再次对原文作者表示感谢。在此收藏,只是当做笔记。

 

相关文章
|
6月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
716 2
|
前端开发 JavaScript 开发者
前端 CSS 优化:提升页面美学与性能
前端CSS优化旨在提升页面美学与性能。通过简化选择器(如避免复杂后代选择器、减少通用选择器使用)、合并样式表、合理组织媒体查询,可减少浏览器计算成本和HTTP请求。利用硬件加速和优化动画帧率,确保动画流畅。定期清理冗余代码并使用缩写属性,进一步精简代码。这些策略不仅加快页面加载和渲染速度,还提升了视觉效果,为用户带来更优质的浏览体验。
|
9月前
|
前端开发
文字显示在div 最下面,css怎么写
文字显示在div 最下面,css怎么写
625 0
|
前端开发 JavaScript
如何使用CSS过渡实现页面元素的淡入淡出效果?
如何使用CSS过渡实现页面元素的淡入淡出效果?
619 79
|
人工智能 程序员 UED
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
789 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发 JavaScript
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
635 14
【02】v1.0.1更新增加倒计时完成后的放烟花页面-优化播放器-优化结构目录-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
856 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
css3 svg制作404页面动画效果HTML源码
css3 svg制作404页面动画效果HTML源码
291 34
|
前端开发
精通CSS+DIV网页样式与布局--滤镜的使用
        在上篇博客中,小编主要简单的介绍了使用CSS,如何制作实用菜单,今天我们继续来总结有关CSS的基础知识,今天小编主要简单的来介绍一下CSS中关于滤镜的使用,首先,小编先来简单的介绍一下滤镜,我们这次来说说滤镜的使用,首先,小编来简单的介绍一下滤镜的概念,CSS滤镜并不是浏览器的插件,也不符合CSS标准,二而是微软公司为增强浏览器功能而特意开发的并整合在IE浏览器中的又累功能的集合。
1166 0
|
前端开发
精通CSS+DIV网页样式与布局--制作实用菜单
        在上篇博文中,小编中主要的简单总结了一下CSS中关于如何设置页面和浏览器元素,今天小编继续将来介绍CSS的相关基础知识,这篇博文,小编主要简单的总结一下在CSS中如何制作网页中的菜单,这部分的内容包括:项目列表、无需表格的菜单、菜...
1425 0

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    435
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    343
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    327
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    214
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    438
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    618
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    872
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    230
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    716
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    406
  • 下一篇
    开通oss服务