HTML+CSS实现div的高度自适应填满剩余空间的7种方法

Stella981
• 阅读 666

如图上下两部分,上面部分适应内容的高度,下面部分填充剩余部分。HTML+CSS实现div的高度自适应填满剩余空间的7种方法

当下面内容不够时,在下面部分出现滚动条

HTML+CSS实现div的高度自适应填满剩余空间的7种方法

有2种情况

1.上面内容的高度适应内容,只有2种方法(flex、quirks+table)

2.上面内容为固定高度,除了上面2种方法,方法还有(borderbox、position:fixed、top+bottom、javascript、calc)

先说结论

推荐使用flex布局

1.flex布局,兼容性好,大多数浏览器都可以支持(加上前缀)。即便是不支持的浏览器,也能优雅降级。缺点是各种带前缀的属性多,让人看了就不想学,坑多。把这个功能写成CSS类就很好使用,具体可以参考我的另一篇文章。

2.quirks+table。这个可以降级用,但是HTML结构和flex布局不同,所以只能在生成HTML的UI库里用。

3.提到borderbox,就得说说W3C标准盒模型和传统IE盒模型的历史了。W3C标准盒模型(content-box)设定的高度为内部高度,传统IE盒模型(border-box)设定的高度为外部高度。最终IE6起支持W3C标准盒模型,并提供了quirks模式来兼容旧IE的盒模型。长期以来都推荐使用W3C标准盒模型,淘汰传统IE盒模型,因此这种做法没有被广泛使用。而content-box布局困难,之所以会有高度怎么适应这样的布局问题,可以怪到content-box头上。最终历史证明了border-box比较好用,现在大量的库已经改成border-box了,W3C也承认了错误。因此你可以放心使用,不要觉得是被淘汰的东西不敢用。

4.上面部分position:fixed,下面部分给个padding。主要在手机上用,因为有个大大的好处就是可以使用原生的滚动条。手机的DIV是不显示滚动条的,用这种方法使用原生的滚动条性能好。不好处是只能在全局使用,不能在内部DIV使用。

5.top+bottom不如border-box。有些人使用top+bottom是因为content-box习惯了,没想到还能border-box。或者在推广content-box,淘汰border-box的时代的库。

6.用javascript可以避免一下兼容问题完全自己动手,代价是1.性能,2.开发起来麻烦。

7.用calc不如flex,calc兼容性很不好。用calc主要是初学者,专做业务的不是专做CSS的,直接百度“CSS如何实现百分比减固定值”来的答案。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
3年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这