分享
 
 
 

最小高度100%页脚保持在底部的布局方法

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

有时候,我们用CSS创建一个高度自适应布局,如何保证页脚(footer)在内容不超过一屏的情况下始终保持在布局最下方是一个比较头疼的事。我看过一些利用绝对定位的例子,但总感觉不是那么完美,经过一下午的研究总结出一个利用负值外补丁的方法来实现这个效果的方法,兼容IE5.0+,Opera 8.5+,Firefox 1.5+。下面我们看步骤:

1、为了让浏览器识别高度100%我们需要先给 html 和 body 加上一个高度值,同时清除所有元素的 margin 和 padding。顺便提一下,经过我的测试,html 和 body 的 height: 100%; 等于整个浏览器窗口的总高度,无论内容是否超过一屏。而它们下一级子元素 height: 100%; 则等于第一屏的高度。如何,是不是有点不好理解?

* {

margin: 0;

padding: 0;

}

html, body {

height: 100%;

}

2、因为上面提到的问题,所以为了让布局自适应高度,我们要加上 min-height: 100%;,虽然IE不支持这个属性但是IE的 height: 100%; 有同样的作用:

#wrapper {

min-height: 100%;

}

* html #wrapper {

height: 100%;

}

这样,一个最简单的最小高度满一屏的自适应布局就做好了。为了便于查看,我加了一些宽度和背景色修饰,如下:

* {

margin: 0;

padding: 0;

}

html, body {

height: 100%;

text-align: center;

font: 12px/1.4 Verdana, sans-serif;

background: #f00;

}

#wrapper {

width: 770px;

min-height: 100%;

background: #ccc;

margin: auto;

text-align: left;

}

* html #wrapper {

height: 100%;

}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>example 2</title>

<style type="text/css">

/*<![CDATA[*/

* {

margin: 0;

padding: 0;

}

html, body {

height: 100%;

text-align: center;

font: 12px/1.4 Verdana, sans-serif;

background: #F00;

}

#wrapper {

width: 770px;

min-height: 100%;

background: #ccc;

margin: auto;

text-align: left;

}

* html #wrapper {

height: 100%;

}

#header {

background: Green;

height: 40px;

}

#sidebar {

float: left;

width: 200px;

background: Gray;

}

#content-box {

float: right;

width: 570px;

background: Olive;

}

#footer {

height: 50px;

background: Background;

width:770px;

margin: auto;

}

/*]]>*/

</style>

</head>

<body>

<div id="wrapper">

<div id="header">此处显示 id &quot;header&quot; 的内容</div>

<div id="content-box">此处显示 id &quot;content-box&quot; 的内容</div>

<div id="sidebar">此处显示 id &quot;sidebar&quot; 的内容</div>

</div>

<div id="footer">此处显示 id &quot;footer&quot; 的内容</div>

</body>

</html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

3、加上页头页脚和内容部分,为了让 footer 在最下方,我们当然要把 footer“请出”wrapper 之外。当然,这样高度就超过一屏了,别急,后面有解决办法。

#header {

background: Green;

height: 40px;

}

#sidebar {

float: left;

width: 200px;

background: Gray;

}

#content-box {

float: right;

width: 570px;

background: Olive;

}

#footer {

height: 50px;

background: Background;

width:770px;

margin: auto;

}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>example 2</title>

<style type="text/css">

/*<![CDATA[*/

* {

margin: 0;

padding: 0;

}

html, body {

height: 100%;

text-align: center;

font: 12px/1.4 Verdana, sans-serif;

background: #F00;

}

#wrapper {

width: 770px;

min-height: 100%;

background: #ccc;

margin: auto;

text-align: left;

}

* html #wrapper {

height: 100%;

}

#header {

background: Green;

height: 40px;

}

#sidebar {

float: left;

width: 200px;

background: Gray;

}

#content-box {

float: right;

width: 570px;

background: Olive;

}

#footer {

height: 50px;

background: Background;

width:770px;

margin: auto;

}

/*]]>*/

</style>

</head>

<body>

<div id="wrapper">

<div id="header">此处显示 id &quot;header&quot; 的内容</div>

<div id="content-box">此处显示 id &quot;content-box&quot; 的内容</div>

<div id="sidebar">此处显示 id &quot;sidebar&quot; 的内容</div>

</div>

<div id="footer">此处显示 id &quot;footer&quot; 的内容</div>

</body>

</html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

4、为了让 footer 能够刚好在最下方,我们可以给 footer 加一个等于自身高度的上方的负边距强制把它向上推一个自身的高度,即 margin-top: -50px; 。但是这样的话当内容超过一屏我们会看到内容会盖在 footer 的上方,显然这是失败的。所以我们还要给 content-box 和 sidebar 加一个父级元素,设定它的下方内补丁等于 footer 的高度,强制把 content-box 和 sidebar 向上推一个 footer 的高度。同时,因为 content-box 和 sidebar 是浮动元素,所以我们还要让它 闭合浮动元素 。 这样就比较完美了。

#out-content {

padding-bottom: 50px;

}

#out-content:after {

clear: both;

display: block;

font: 1px/0px serif;

content: ".";

height: 0;

visibility: hidden;

}

* html #out-content {

height: 1%;

}

#footer {

height: 50px;

background: Background;

margin: -50px auto 0;

}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Footer Stick</title>

<style type="text/css">

/*<![CDATA[*/

* {

margin: 0;

padding: 0;

}

html, body {

height: 100%;

text-align: center;

font: 12px/1.4 Verdana, sans-serif;

background: #f00;

}

#wrapper {

width: 770px;

min-height: 100%;

background: #ccc;

margin: auto;

text-align: left;

}

* html #wrapper {

height: 100%;

}

#header {

background: Green;

height: 40px;

}

#out-content {

padding-bottom: 50px;

}

#out-content:after {

clear: both;

display: block;

font: 1px/0px serif;

content: ".";

height: 0;

visibility: hidden;

}

* html #out-content {

height: 1%;

}

#sidebar {

float: left;

width: 200px;

background: Gray;

}

#content-box {

float: right;

width: 570px;

background: Olive;

}

#footer {

height: 50px;

background: Background;

width:770px;

margin: -50px auto 0;

}

/*]]>*/

</style>

</head>

<body>

<div id="wrapper">

<div id="header">

<h3>header</h3>

<code>#header {

background: Green;

height: 40px;

}</code> </div>

<div id="out-content">

<div id="content-box">

<h3>content</h3>

<code>#content {

float: right;

width: 80%;

background: Olive;

} </code><code>#content {

float: right;

width: 80%;

background: Olive;

} </code></div>

<div id="sidebar">

<h3>sidebar</h3>

<code>#sidebar {

float: left;

width: 20%;

background: Gray;

}</code> </div>

</div>

</div>

<div id="footer">

<h3>footer</h3>

<code>#footer {

height: 50px;

background: Background;

width:770px;

margin: -50px auto 0;

}</code> </div>

</body>

</html>

[Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

5、举一反三,利用上面的原理我们还可以做一个一边固定宽度一边自适应宽度的液态弹性布局,修改一些宽度然后给 #content-box 下面再套一层就可以实现了。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>Footer Stick</title>

<style type="text/css">

/*<![CDATA[*/

* {

margin: 0;

padding: 0;

}

html, body {

height: 100%;

text-align: center;

font: 12px/1.4 Verdana, sans-serif;

}

#wrapper {

width: 100%;

min-height: 100%;

background: #ccc;

margin: auto;

text-align: left;

}

* html #wrapper {

height: 100%;

}

#header {

background: Green;

height: 40px;

}

#out-content {

padding-bottom: 50px;

}

#out-content:after {

clear: both;

display: block;

font: 1px/0px serif;

content: ".";

height: 0;

visibility: hidden;

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有