详解Sticky Footer 绝对底部的两种套路

yizhihongxing

下面是详解Sticky Footer 绝对底部的两种套路的完整攻略。

一、Sticky Footer的概念

在网页设计中,Sticky Footer指的是网页底部一直贴在视口底部,并且在网页内容过短时也不会出现在视口中的一种解决方案。此外,Sticky Footer还需要保证在网页内容过长时,能够让滚动条正常滚动,即不会被遮挡。

二、套路一:用flex实现

这种套路的主要思路是:

  • 用flex将网页中的容器撑满整个视口;
  • 将网页中的主要内容放在一个flex-grow的容器中,并撑满整个视口;
  • 将网页底部的内容放在一个高度为0的容器中,最后通过margin-top将其推到视口底部。

实现代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Sticky Footer Flex实现</title>
    <style type="text/css">
        body {
            height: 100%;
            display: flex;
            flex-direction: column;
        }
        .main {
            flex-grow: 1;
            background-color: #ccc;
        }
        .footer {
            height: 0;
            margin-top: auto;
            background-color: #333;
            color: #fff;
            text-align: center;
            width: 100%;
        }
    </style>
</head>
<body>
    <div class="main">
        <!-- 网页中的主要内容 -->
    </div>
    <div class="footer">
        <!-- 网页底部的内容 -->
    </div>
</body>
</html>

该代码中,使用了display: flex来将网页全部撑满整个视口;使用了flex-grow: 1来将主要内容的容器撑满整个视口;使用了margin-top: auto来将尾部内容推到视口底部。

三、套路二:用grid实现

这种套路的主要思路是:

  • 用grid将网页分为两行:第一行放置主要内容,第二行放置网页底部;
  • 将第二行的高度设置为0,并使用 grid-row: 2来定位到视口底部。

实现代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Sticky Footer Grid实现</title>
    <style type="text/css">
        body {
            height: 100%;
            display: grid;
            grid-template-rows: auto 0;
            grid-template-areas:
                "main"
                "footer";
        }
        .main {
            grid-area: main;
            background-color: #ccc;
            height: 100%;
        }
        .footer {
            grid-area: footer;
            background-color: #333;
            color: #fff;
            text-align: center;
            width: 100%;
            height: 0;
            grid-row: 2;
        }
    </style>
</head>
<body>
    <div class="main">
        <!-- 网页中的主要内容 -->
    </div>
    <div class="footer">
        <!-- 网页底部的内容 -->
    </div>
</body>
</html>

该代码中,使用了display: grid和grid-template-rows将网页分为两行;使用grid-area将主要内容和底部容器定位到相应的位置;使用grid-row: 2将底部容器定位到视口底部。

四、示例说明

下面,我将通过两个示例来说明如何使用以上的两种套路:

示例一

网页中的主要内容包括一个固定高度的头部和一个主体区域,主体区域中的内容比较少,底部需要放置一个版权信息区域,版权信息需要保证在视口底部。

该示例可以使用flex套路来实现。具体实现代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Sticky Footer示例一</title>
    <style type="text/css">
        body {
            height: 100%;
            display: flex;
            flex-direction: column;
        }
        .header {
            height: 100px;
            background-color: #ccc;
        }
        .main {
            flex-grow: 1;
            background-color: #ddd;
            display: flex;
            flex-direction: column;
        }
        .footer {
            height: 60px;
            margin-top: auto;
            background-color: #333;
            color: #fff;
            text-align: center;
            width: 100%;
        }
    </style>
</head>
<body>
    <div class="header"></div>
    <div class="main">
        <!-- 主体内容 -->
    </div>
    <div class="footer">版权信息</div>
</body>
</html>

其中,网页被分为了三个部分:头部、主体和底部。主体部分使用了flex实现。

示例二

网页中的主要内容包括一个固定高度的头部和一个较长的主体区域,主体区域中有一个按钮,当按钮被点击时,会在主体区域中动态添加一些内容。底部需要放置一个版权信息区域,版权信息需要保证在视口底部。

该示例可以使用grid套路来实现。具体实现代码如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Sticky Footer示例二</title>
    <style type="text/css">
        body {
            height: 100%;
            display: grid;
            grid-template-rows: 100px auto 0;
            grid-template-areas:
                "header"
                "main"
                "footer";
        }
        .header {
            grid-area: header;
            background-color: #ccc;
        }
        .main {
            grid-area: main;
            background-color: #ddd;
            position: relative;
        }
        .button {
            position: absolute;
            top: 10px;
            left: 10px;
            padding: 10px;
            background-color: #333;
            color: #fff;
            cursor: pointer;
            z-index: 2;
        }
        .content {
            position: relative;
            z-index: 1;
        }
        .footer {
            grid-area: footer;
            background-color: #333;
            color: #fff;
            text-align: center;
            width: 100%;
            height: 0;
            grid-row: 3;
        }
    </style>
</head>
<body>
    <div class="header"></div>
    <div class="main">
        <div class="button">添加内容</div>
        <div class="content">
            <!-- 主体内容 -->
        </div>
    </div>
    <div class="footer">版权信息</div>
    <script>
        //按钮点击事件,添加内容
        document.querySelector('.button').addEventListener('click', function() {
            let content = document.createElement('div');
            content.innerHTML = '这是新添加的内容';
            document.querySelector('.content').appendChild(content);
        });
    </script>
</body>
</html>

其中,网页被分为了三个部分:头部、主体和底部。主体部分使用了grid实现,并且在其中动态添加了新的内容。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Sticky Footer 绝对底部的两种套路 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • ThinkPHP Mobile使用方法简明教程

    ThinkPHP Mobile使用方法简明教程 什么是ThinkPHP Mobile ThinkPHP Mobile是ThinkPHP团队开发的一款基于移动Web开发框架,支持响应式设计,适配不同屏幕尺寸的手机、平板和PC端设备,同时支持多种常用的JS框架,如jQuery、MUI等。 如何安装ThinkPHP Mobile 安装ThinkPHP Mobile…

    css 2023年6月10日
    00
  • 通过CSS禁用页面内容选中和复制操作

    为了禁用页面内容选中和复制操作,我们可以采取以下两种方法: 1. 通过CSS的user-select属性来禁用选中操作 CSS的user-select属性可以控制用户是否可以选中页面中的文本,通过将其属性值设置为none可以禁用选中操作,代码如下: * { -webkit-user-select: none; /*webkit浏览器*/ -moz-user-…

    css 2023年6月10日
    00
  • 使用CSS来扩展增强Input Range的示例

    使用CSS可以对Input Range进行扩展和增强,以下是基本的攻略步骤。 1. 基本的Input Range样式 首先我们来创建一个基本的Input Range样式,HTML代码如下: <input type="range" min="0" max="100" value="50…

    css 2023年6月10日
    00
  • HTML5 Canvas绘制图形从入门到精通

    HTML5 Canvas绘制图形从入门到精通 HTML5 Canvas是一种强大的绘图技术,可以在网页上创建各种各样的图形和动画。本攻略将从入门开始,逐步学习如何使用Canvas绘制常见的图形和实现动画效果。 简介 HTML5 Canvas是基于JavaScript的2D绘图API,可以在网页上直接绘制图形,比如线条、矩形、圆等。相比之前的绘图技术,如基于F…

    css 2023年6月10日
    00
  • javaScript+turn.js实现图书翻页效果实例代码

    JavaScipt + turn.js 实现图书翻页效果实例 介绍 在网站开发中,我们经常需要将一些电子书或者pdf格式的文档转化为网页形式,同时保留原有的阅读体验,这时候实现图书翻页效果就显得尤为重要。 turn.js 是一个基于 JQuery 的图书翻页插件,通过 turn.js 插件,我们可以方便快捷地实现 Web 端的图书翻页效果。 本文将讲解 tu…

    css 2023年6月9日
    00
  • DIV多层嵌套margin-top的BUG问题

    当在HTML页面中嵌套多层DIV时,设置元素的margin-top属性可能会导致边距的计算出现问题,从而导致出现一些意外的渲染结果,这种问题被称为DIV多层嵌套margin-top的BUG问题。 为解决这一问题,我们可以采用以下两种方法: 方法一:使用border代替margin 我们可以使用border来代替margin,并且将border的颜色设置为背景…

    css 2023年6月10日
    00
  • CSS中的字体大小设置属性总结

    下面是CSS中的字体大小设置属性总结的完整攻略: 1. CSS中的字体大小设置属性 在CSS中,可以使用font-size属性设置字体大小。font-size属性通常设置为一个长度值,例如像素或百分比。 2. 设置固定字号 在CSS中,使用一个固定值设置字体大小是最常见的方法。例如,在以下示例中,将font-size设置为16px: body { font-…

    css 2023年6月9日
    00
  • jquery实现网页定位导航

    下面是关于“jQuery实现网页定位导航”的完整攻略,我将按照以下步骤进行讲解: 准备工作 实现初步导航 实现动态效果 示例说明 注意事项 1. 准备工作 在使用 jQuery 实现网页定位导航之前,需要先引入 jQuery 库。可以通过以下方式引入: <script src="https://ajax.googleapis.com/ajax…

    css 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部