两种方式实现sticky footer绝对底部

一、什么是sticky footer

如果页面内容不够长的时候,页脚块粘贴在视窗底部;如果内容足够长时,页脚块会被内容向下推送,我们看到的效果就如下面两张图这样。这种效果基本是无处不在的,很受欢迎。

二、第一种方式,利用margin和padding实现

先看效果

下面是代码

<!DOCTYPE html>
<html>
<head>
    <meta charset=" utf-8">
    <title>margin,padding实现sticky footer</title>
    <style>
        html, body, p {
            padding: 0;
            margin: 0;
            height: 100%;
        }

        body {
            min-height: 100%;
        }

        #wrapper {
            min-height: 100%;
            background: yellow;
        }

        #content {
            padding-bottom: 50px;
            vertical-align: center;

        }
        #text-content{
            height: 500px;
        }
        #footer {
            margin-top: -50px;
            height: 50px;
            background: wheat;
        }
    </style>

</head>
<body>
<div id="wrapper">
    <div id="content">
        <div id="text-content">填充内容11111111111111</div>
    </div>
</div>
<div id="footer">底部内容</div>
</body>
</html>

可以尝试下在text-content中添加内容,可以发现,底部footer是不会受到影响的,坚挺的固定在底部。

这种套路的思路是,给内容区域设置 min-height: 100%,将 footer 推到屏幕下方

然后给 footer 添加 margin-top,其值为 footer 高度的负值,就能让 footer 回到屏幕底部

需要注意的就是内容区域 content 的 padding、footer 的 height 和 margin, 必须保持一致

这种写法的兼容性非常好,实测 IE7 也能正常展示

但是如果页面的主体布局有其他兼容性问题,Sticky Footer 就需要做一些相应的修改

三、第三种方式,使用flex

代码如下,没有添加兼容性前缀

<!DOCTYPE html>
<html>
<head>
    <meta charset=" utf-8">
    <title>flex Sticky footer</title>
    <style>
        html, body {
            height: 100%;
            padding: 0;
            margin: 0;
        }

        body {
            min-height: 100%;
            display: flex;
            flex-direction: column;
        }

        #header {
            line-height: 50px;
            background: wheat;
        }

        #content {
            flex: 1;
            background: yellow;
        }

        #text-content {
            height: 600px;
        }

        #footer {
            line-height: 50px;
            background: wheat;
        }
    </style>

</head>
<body>
<div id="header">顶部</div>
<div id="content">
    <div id="text-content">aasdasd</div>

</div>
<div id="footer">底部</div>
</body>
</html>

这种方法就是利用flex布局对视窗高度进行分割。

footer的flex设为0,这样footer获得其固有的高度;

content的flex设为1,这样它会充满除去footer的其他部分。

时间: 2024-11-04 22:27:59

两种方式实现sticky footer绝对底部的相关文章

【REACT NATIVE 系列教程之十三】利用LISTVIEW与TEXTINPUT制作聊天/对话框&&获取组件实例常用的两种方式

本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/react-native/2346.html 本篇Himi来利用ListView和TextInput这两种组件实现对话.聊天框. 首先需要准备的有几点:(组件的学习就不赘述了,简单且官方有文档) 1. 学习下 ListView: 官方示例:http://reactnative.cn/docs/0.27/tutorial.html#content

Log4Net日志记录两种方式

本文转载:http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Apache软件基金会Apache Logging Services工程的一部分.Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务.(f:百度百科) 原理 Log4ne

自学iOS开发小功能之三:弹框的两种方式(iOS8.3之后新的方式,之前的已经弃用)

1.弹框出现在屏幕中间位置 UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示" message:@"是否退出" preferredStyle: UIAlertControllerStyleAlert]; [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActio

em创建的两种方式

em创建(两种方式1,图形dbca,当然了,前提是先创建一个监听. 2,手工命令安装em)手工命令创建em(确保数据库开启,确保监听正常并且最好是动态监听,确保system表空间够用大概1G左右),我的空间有限只给了800M,如下 select file_name,tablespace_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'SYSTEM';alter database datafile '/u01

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用

使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 选择调用的进程为 24 i386 getuid sys_getuid1647 i386 getgid sys_getgid16 使用库函数API方式 使用C代码中嵌入汇编代码方式

Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者模型:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列)的占用权.因为生产者如果不释放对临界资源的占用权,那么消费者就无法消费队列中的商品,就不会让队列有空间,那么生产者就会一直无限等待下去.因此,一般情况下,当队列满时,会让生产者交出对临界资源的占用权,并进入挂起状态.然后等待消费者消费了商品,然后消费者通知生产者队列有空间了.同样地,当

senchaTouch 给组件传参的两种方式

在senchaTouch 页面跳转中,有时我们需要将其前一个页面的相关参数传入到新的页面或者新的控件中,这是我们该如何传递参数进去呢,一下有两种方式: var arg;//定义将要 传入的参数 Ext.define('MyApp.view.Init',{ extend:'Ext.Container', id:'chat_more_btm', xtype:'init', config:{ layout:'fit', myarg:arg//把将要传入的参数映射到一个属性上面 }, initializ

通过编码和xml文件两种方式实现tween动画

tween有四种动画效果:alpha(透明).rotate(旋转), translate(移动),scale(缩放); 可以通过硬编码和xml文件这两种方式来实现. xml实现: 第一步:在项目的res文件下面新建一个文件夹名字是anim(必须) 第二步:在anim文件夹下面新建新的xml文件,在xml文件中具体设置动画效果 第三步:在Activity中使用 AnimationUtils.loadAnimation(MainActivity.this,R.anim.xx);来获取. 1.alph

关于Mysql删除表数据的两种方式对比

1.delete from table_name 一行一行删除,只删除表数据,auto_increament仍停留在最后一天数据的下一个值. 2.truncate table_name 快捷删除表数据.先删除整个表,然后重新建表结构.auto_increament从1开始. 关于Mysql删除表数据的两种方式对比,布布扣,bubuko.com