对“粘连”footer布局的思考和总结

经典的"粘连"footer布局

参考文章链接在文章末尾,简单的语言总结如下:

经典的“粘连”footer布局就是。我们有一块内容<main>。当<main>的高度足够长的时候,紧跟在<main>后面的元素<footer>会跟在<main>元素的后面。当<main>元素比较短的时候(比如小于屏幕的高度),我们期望这个<footer>元素能够“粘连”在屏幕的底部。如下图所示:

main足够长时

main比较短时

上面布局的实现方法在参考文章中已经有提到。下面主要探讨我们项目中遇到的情况:

我们需要实现的布局就是 按钮“提交”所在的区域能够自由伸缩。当屏幕较低时,最就是“提交”按钮和表单所在的区域接触或者有一定的间隙。 示例图就是下面的:

当屏幕足够高的时候

屏幕足够高的时候

当屏幕比较低的时候

屏幕比较低的时候

上面的布局在移动端需要考虑以下因素对布局的影响:

  1. 安卓上键盘弹起会对absolutefixed产生影响;

  2. 我们的绝对定位的元素是使用的bottom相对于屏幕的底部定位;

为了解决以上的两个问题的解决方案:

  1. 使用正常文档流的元素包裹绝对定位的元素;

  2. 绝对定位元素的父级元素应该有一个min-height防止,父级元素太低时,绝对定位元素“溢出”父级元素;(min-height >= 绝对定位元素 + bottom);

根据“粘连”footer布局的思想,结合弹性盒布局。我们需要的这种布局可以有两种方式,分别介绍如下:

1.使用vh单位

先来了解下vhvw这两个单位。

  1. vh相对于视口的高度。视口被均分为100单位的vh。

  2. vw相对于视口的宽度。视口被均分为100单位的vw。

上面两个单位通俗的意义就是在css中获取当前屏幕的高度和宽度(不通过js计算)。

示例代码如下:

<body><div class="item1"></div><div class="item2"></div><div class="item3"><div class="btn-item">你好</div></div>
</body>

css代码如下:

* {margin: 0;padding: 0;
}body {/*主要就是这里获取视窗口的高度*/min-height: 100vh;display: -webkit-box;display: -webkit-flex;display: -moz-box;display: -ms-flexbox;display: flex;-webkit-flex-flow: column;-ms-flex-flow: column;flex-flow: column;
}.item1 {height: 100px;background-color: #ddd
}.item2 {height: 300px;background-color: #fea0a0
}.item3 {/*防止绝对定位的元素溢出父级元素*/min-height: 30px !important;border: 1px solid #481eff;position: relative;height: 0;-webkit-box-flex: 1;-webkit-flex: 1;-moz-box-flex: 1;-ms-flex: 1;flex: 1;-webkit-flex-basis: 0;-ms-flex-preferred-size: 0;flex-basis: 0;max-height: 100%;
}.btn-item {position: absolute;bottom: 10px;border: 1px solid #000;
}

以上就是完全使用css来实现我们项目中布局的方法,但是这个方法有一个很明显的缺点就是vh单位的兼容性问题。兼容列表如下:

因为兼容性问题,纯css的方法在我们的项目中使用还是不现实。但是我们想下问题的本质:在使用弹性盒的基础上,我们唯一需要做的就是知道弹性盒元素的高度(就是我们项目中屏幕的高度)。

2.js简单计算满足兼容问题。

就是在dom树渲染完成以后给body设置高度未屏幕的高度。为了避免不必要的“重绘”或者是“重排”在head标签中添加如下js。


var callback = function(){document.body.style.height=window.screen.height+'px';
};//是否是页面加载触发绑定了事件
if ( document.readyState === "complete" || (document.readyState !== "loading" && !document.documentElement.doScroll) ) {callback();
} else {//DOMContentLoaded 仅支持ie9+ 和移动端  <=ie8 使用 onreadystatechange  可以监听dom是否加载完毕document.addEventListener("DOMContentLoaded", callback);
}

使用 jQuery 或者是 Zepto 的方法,仍然在head标签中添加如下js。

$(function(){$('body').height($(window).height());
})

所以在我们的项目中结合弹性盒布局和添加简单的动态js计算屏幕的高度。就可以完美实现我们项目中需要的布局。

body {/*使用js动态计算就可以不使用vh单位*//*min-height: 100vh;*/display: flex;
}

参考文章:

因为是一个

cssstickyfooter.com
ryanfait.com/sticky-footer
css-tricks.com/snippets/css/sticky-footer
pixelsvsbytes.com/blog/2011/09/sticky-css-footers-the-flexible-way
mystrd.at/modern-clean-css-sticky-footer


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/259860.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机函数公式一等奖怎么算,信息技术应用 用计算机画函数图象教案设计(一等奖)...

卫鹏展地区&#xff1a; 湖北省 - 黄冈市 - 英山县学校&#xff1a;英山县金铺镇金铺中学 共1课时信息技术应用 用计算机画函数图象">信息技术应用 用计算机画… 初中数学 人教2011课标版 1教学目标1&#xff0e;结合具体情境理解一次函数的意义&#xff0c;能结…

这样去写你的 HTML

昨天在 twitter 上说&#xff0c;怎么忍心把页面写得这么难用&#xff1f;是的&#xff0c;这个世界还有一群人等着我们创建出来的东西&#xff0c;可以让他们的生活能过得更容易呢。比如那些需要读屏软件的用户。作为一个前端&#xff0c;我们又怎么会忍心呢。之前就一直想写这…

iframe懒加载_前端常见问题

原地址&#xff1a;https://blog.csdn.net/Mr_JavaScript/article/details/843110681. flex布局&#xff1a;又叫做弹性布局任何一个容器都可以指定flex布局&#xff0c;如display:flex 或 display:inline-flex注意&#xff1a;设置了flex布局以后&#xff0c;子元素的float&am…

手机运行服务器无响应,《最强蜗牛》服务器无响应怎么办 服务器无响应解决方法...

导读最强蜗牛服务器无响应怎么办&#xff1f;本作在今日迎来了正式的公测&#xff0c;这会导致大批量的玩家同时涌入进来&#xff0c;而服务器也因此而遭受到了非常大的符合&#xff0c;所以会导致后续加入进来的玩家出现服务器无响应进不去的现象。下面就为大家带...最强蜗牛服…

Android 开源框架Universal-Image-Loader学习

Android 开源框架Universal-Image-Loader完全解析&#xff08;一&#xff09;--- 基本介绍及使用 Android 开源框架Universal-Image-Loader完全解析&#xff08;二&#xff09;--- 图片缓存策略详解 Android 开源框架Universal-Image-Loader完全解析&#xff08;三&#xff09;…

自己动手写操作系统--个人实践

近期開始看于渊的《自己动手写操作系统》这本书&#xff0c;刚開始看就发现做系统的引导盘居然是软盘&#xff01;心里那个汗啊&#xff01; 如今都是U盘了&#xff0c;谁还用软盘。于是考虑用U盘。 于是開始下面步骤&#xff1a; 1、既然书上说给先要把软盘做引导盘&#xff0…

蔻驰和mk哪个更大牌_mk和coach哪个好?mk和coach包包是一个档次吗?

说到包包&#xff0c;mk和coach可谓是轻奢界的两大巨头了。因此&#xff0c;两个品牌的包包不可避免的会被经常拿来作比较。那么&#xff0c;从各个角度来讲mk和coach那款包包更好呢&#xff1f;这两款包包又有哪些本质上的区别呢&#xff1f;mk和coach哪个好价格对比大致上&am…

Linux 配置 swap 区

Linux 配置 swap 区 很多时候我们需要配置 swap 主要的原因是物理内存太贵了&#xff0c; 服务器也是一样&#xff0c; 当内存不够用时&#xff0c; 系统会卡死&#xff0c; 因此我们宁愿牺牲一点性能也要让系统正常运行。 当然&#xff0c; 在系统物理内存足够的条件下&#x…

嵊州职教中心计算机多少分数,嵊州中考考试分数线

每年六月份最热闹的大概就是中考了&#xff0c;很多人都想提前知道中考分数线&#xff0c;下面是百分网小编整理的嵊州2017年中考考试分数线&#xff0c;欢迎阅读借鉴!嵊州2017年中考分数线2017年嵊州中考考试时间嵊州中考录取情况1. 第一批 嵊州中学、马寅初中学实验班&#x…

12月和12年

刚刚撇了一眼&#xff0c;注册博客园已经12年了。时间有时只是个数字&#xff0c;有没有意义呢&#xff0c;自己去判断啦。 像博客园这样的技术社区&#xff0c;很是难得&#xff0c;虽然这个社区里.NET开发者才是一等公民。 我最喜欢的是它的博客系统的高度可Diy性。经常访问我…

【2011-6】【奇数】

Description 键盘输入一个奇数 P (P<50)&#xff0c;其个位数字不能是5&#xff0c;求一个整数 S&#xff0c;使 P*S 1111...1&#xff0c;即乘积各位都是1。要求用两行依次输出以下结果: ①S的全部数字&#xff1b;②乘积中数字1的个数。 例&#xff1a;输入P3&#xff0c…

sql加上唯一索引后批量插入_阿里大佬总结的52条SQL语句性能优化策略,建议收藏...

你知道的越多&#xff0c;不知道的就越多&#xff0c;业余的像一棵小草&#xff01;你来&#xff0c;我们一起精进&#xff01;你不来&#xff0c;我和你的竞争对手一起精进&#xff01;编辑&#xff1a;业余草cnblogs.com/SimpleWu/p/9929043.html推荐&#xff1a;https://www…

Web缓存技术

本章导读 缓存主要是为了提高数据的读取速度。因为服务器和应用客户端之间存在着流量的瓶颈&#xff0c;所以读取大容量数据时&#xff0c;使用缓存来直接为客户端服务&#xff0c;可以减少客户端与服务器端的数据交互&#xff0c;从而大大提高程序的性能。 本章从缓存所在的命…

神武4手游服务器维护,神武4手游势不可挡开服时间表_神武4手游新区开服预告_第一手游网手游开服表...

2020-06-1910:00新服天涯刀客已经开服2020-06-0510:00新服飞仙摘星已经开服2020-05-2910:00新服踏雪无痕已经开服2020-05-2210:00新服因缘际会已经开服2020-05-1910:00新服龙的传人已经开服2020-05-1510:00新服鸾凤和鸣已经开服2020-05-1211:40新服其疾如风已经开服2020-05-081…

BZOJ 4066 简单题 ——KD-Tree套替罪羊树

【题目分析】 直接x,y二维轮番划分&#xff0c;暴力即可。 套上替罪羊&#xff0c;打碎重构&#xff0c;对于时间复杂度有了保证。 写起来好麻烦&#xff0c;重构的技巧很棒&#xff01; 【代码】 #include <cstdio> #include <cstring> #include <iostream>…

【HTML5初探之绘制图像(上)】看我canvas元素引领下一代web页面

弧度一块可能有误&#xff0c;需要再研究 导航 【初探HTML5之使用新标签布局】用html5布局我的博客页&#xff01; 【HTML5初探之form标签】解放表单验证、增加文件上传、集成拖放 【HTML5初探之绘制图像&#xff08;上&#xff09;】看我canvas元素引领下一代web页面 【HTML5初…

或运算

逻辑或 ||int i, j, k;i 0x15;j 0x41;k i || j;反汇编代码如下:MOV DWORD PTR SS:[EBP-4], 15MOV DWORD PTR SS:[EBP-C], 41CMP DWORD PTR SS:[EBP-4], 0JNZ SHORT asm_OR.00401029CMP DWORD PTR SS:[EBP-C], 0JNZ SHORT asm_OR.00401029MOV DWORD PTR SS:[EBP-10], 0JMP SH…

构造方法的调用顺序和成员变量的初始化时机以及动态绑定

构造方法的调用顺序&#xff1a;子类构造器中&#xff0c;JVM会自动的先调用父类的构造方法&#xff0c;然后再执行子类构造方法。在JVM自动调用父类构造方法的时候&#xff0c;会完成父类中拥有的成员变量的值的初始化操作&#xff0c;此时子类的成员变量并未初始化&#xff0…

Python interview_python

https://github.com/taizilongxu/interview_python 1 Python的函数参数传递 strings, tuples, 和numbers是不可更改的对象&#xff0c;而list,dict等则是可以修改的对象 2 Python中的元类(metaclass) 3 staticmethod和classmethod python 三个方法&#xff0c;静态方法&#xf…

突然不能 ip访问服务器文件夹,用友U8 工作站连接不到服务器,ping IP及服务器名都正常,访问服务器共享文件夹也正常...

用友U8 U8存货采购入库单存货现存量与存货核算中的明细帐数量不符用友U8 U8存货采购入库单存货现存量与存货核算中的明细帐数量不符问题原因:错误原因见下面解决方案中的分析。解决方法:在查询存货明细帐和现存量09仓库存货510241数量为123&#xff0c;但在添采购入库单红字时却…