宽度自适应布局:

1、使用场景:

一侧(左侧或者右侧)为固定的导航或者菜单栏,另一侧将会随着浏览器的缩放而自适应改变其大小。这种布局结构可用于顶层布局结构亦可用于某个局部功能块,常见于各种web系统(OA系统,ERP系统)等。常见的有两列布局或者三列布局(甚至是多列布局)。

2、实现原理:

以两列布局为例,一侧固定宽float浮动,另一侧不浮动并使用margin属性 给浮动层留出浮动空间。

3、demo如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>宽度自适应</title><style>html,body,div {height:100%;padding:0;margin:0;border:0;text-align: center;}.left {width:200px;float: left;background-color: lightskyblue;}.center {width:auto;margin-left:200px;_margin-left:197px;  //IE6的兼容写法,margin减少3pxbackground-color: lightcyan;}</style>
</head>
<body><div class="left">left</div><div class="center">center</div></body>
</html>

效果如下:

注意:

1、上述代码右侧 div.center 元素不设置样式 width:auto; margin-left:200px; 也可以实现右侧自适应宽度。但是,不设置的话会导致div.center 的子元素使用margin属性不是基于.center 父元素位置的,如下代码对应的效果

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>宽度自适应</title><style>html,body,div {height:100%;padding:0;margin:0;border:0;}.left {width:200px;float: left;background-color: lightskyblue;}.center {background-color: lightcyan;}.center div {height:100px;background-color: #fff;margin-left:250px;}</style>
</head>
<body><div class="left">left</div><div class="center">center<div>这是中心区域的子元素</div></div></body>
</html>

2、在IE6浏览器下两列之间会存在3px的间隙bug:IE6浏览器会在浮动列和非浮动列之间插入3px的空间。IE6的3px bug问题的解决方式是两列都设置为float或者非浮动层一侧margin值减少3px。而这里要实现宽度自适应,最好的解决方式是右侧.center层margin-left:197px;

所以修改右侧div.center层的样式代码,兼容性的写法如下:

  .center {width:auto;margin-left:200px;_margin-left:197px;  //margin减少3pxbackground-color: lightcyan;}

高度自适应布局:

1、使用场景:

通常适用于顶栏(或者底栏)需要固定,剩余的部分能够根据浏览器的大小自适应其高度。

2、实现原理:

在现在浏览器中(包括IE7+,Chrome,Firefox等等),高度自适应可以利用绝对定位来解决。当一个元素的定位属性是absolute时,它将摆脱默认的文档流,其大小默认是元素内容的大小,除非手动给其设置宽高。

当一个元素是绝对定位时,如果没有给它设定高度或宽度,则它的的高度和宽度是由它的 top、right、bottom、left 属性决定的,换言之,自身的属性是由自身周围的绝对布局元素决定的 。这样,就可以实现元素的高度自适应布局了。

3、demo如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>高度自适应</title><style>html,body {height:100%;}body,div {margin: 0;padding: 0;}html {_padding-top:100px;  //IE6盒子改变padding不会形象content高}.top {background-color: lightskyblue;height: 100px;_position:absolute;_top:0px;_width:100%;}.main {background-color: lightcyan;position: absolute;top: 100px;bottom: 0;left: 0;right: 0;_height:100%;_width:100%;}</style></head><body><div class="top">我是top</div><div class="main">main元素,使用absolute绝对定位,使用top属性实现高度自适应</div></body>
</html>

效果:

注意:

在IE6中,即使你将一个元素的定位属性设置成absolute了,此时改变其位置属性并不能改变元素的大小。解决方式是利用IE盒子特性的content包含padding的原理,如IE6中给html设定padding,并不会撑大html元素的尺寸来实现

Sticky Footer 布局的多种方式:

1、使用负margin原理实现:

htmlbodycontainer容器的高度都设为100%,即container已经占据满了整个页面了,此时再添加footer容器,则footer必定会超出页面底部,而且会让页面出现滚动条。所以,我们给footer添加一个负值的margin-top,将footer容器从屏幕外拉上来,同时cotent内容使用padding-bottom给footer留空位。这个负值的margin-topfooter的高度相同。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Sticky Footer 布局测试</title><style>
html,body {height:100%;margin: 0;padding: 0;
}.container {min-height: 100%;background-color: lightcyan;height: auto !important;height: 100%; /*IE6不识别min-height*/
}.container .content{padding-bottom: 50px; /* footer区块的高度 */background-color: lightskyblue;/* height:800px;  当文本内容高度超出显示器高度范围时,页脚粘在就内容脚部*/
}.footer {position: relative;margin-top: -50px;  /* 使footer区块正好处于content的padding-bottom位置 */height: 50px;clear: both;background-color: gray;
}.clearfix::after {display: block;content: ".";height: 0;clear: both;visibility: hidden;
}</style></head><body><div class="container clearfix"><div class="content">// 这里是页面内容</div></div><div class="footer">// 这里是footer的内容</div></body>
</html>

这种负margin的布局方式,是兼容性最佳的布局方案,各大浏览器均可完美兼容,适合各种场景,但IE6不支持min-height样式,且使用这种方式的前提是必须要知道footer元素的高度,且结构相对较复杂。

注意:content元素的padding-bottomfooter元素的高度以及footer元素的margin-top值必须要保持一致。

附:min-height的css表达式代码如下,但不建议采用,与性能优化相悖。

.content{min-height:calc(100vh-footer的高度);box-sizing:border-box;
}  

2、footer绝对定位结合主体的padding-bottom实现:

是footer因为绝对定位脱离文档流后,使用bottom:0; 会使之一直在父元素contaner容器底部位置,再利用contaner容器的min-height就实现了footer元素在内容页面少于一屏时候显示在显示器页脚位置,当显示内容页面大于等于一屏时紧跟在内容脚部。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Sticky Footer 布局测试</title><style>
html,body {height:100%;margin: 0;padding: 0;
}.container {min-height: 100%;background-color: lightcyan;height: auto !important;height: 100%; /*IE6不识别min-height*/position: relative;
}.container .content{padding-bottom: 50px; /* footer区块的高度 */background-color: lightskyblue;/*height:800px; *//*  当文本内容高度超出显示器高度范围时,页脚粘在就内容脚部*/
}.footer {position: absolute;width:100%;height: 50px;bottom: 0;clear: both;background-color: gray;
}.clearfix::after {display: block;content: ".";height: 0;clear: both;visibility: hidden;
}</style></head><body><div class="container clearfix"><div class="content">// 这里是页面内容</div><div class="footer">// 这里是footer的内容</div></div></body>
</html>

3、使用flex原理实现:

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

flex 是 flex-growflex-shrinkflex-basis的缩写flex 的默认值是以上三个属性值的组合。

假设以上三个属性同样取默认值,则 flex 的默认值是 0 1 auto。当 flex 取值为 none,则计算值为 0 0 auto ;当 flex 取值为 auto,则计算值为 1 1 auto;当 flex 取值为一个非负数字,则该数字为 flex-grow 值,flex-shrink 取 1,flex-basis 取 0%;当 flex 取值为一个长度或百分比,则视为 flex-basis 值,flex-grow 取 1,flex-shrink 取 1

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Sticky Footer 布局测试</title><style>
html,body {height:100%;margin: 0;padding: 0;
}.container {min-height: 100%;background-color: lightcyan;display: flex;flex-direction: column;
}.content{flex:1;background-color:lightskyblue;
}
.footer {height:100px;flex:0;background-color: grey;
}</style></head><body><div class="container"><div class="content">content,这是主要内容区域</div><div class="footer">footer,这是脚部内容区域</div></div></body>
</html>

这种布局方式结构简单,代码量少,也是较为推荐的布局方式。

注意:flex属性存在浏览器兼容性为问题,flex样式前需要添加-webkit-, -ms- 或 -moz- 等前缀兼容个各个浏览器,同时对浏览器版本有要求,必须是不低于以下各个浏览器版本

当然也可以使用表达式

css宽高自适应布局,实现Sticky Footer的三种布局方式相关推荐

  1. 从零开始学习前端开发 — 7、CSS宽高自适应

    一.宽度自适应 语法:width:100%; 注: a)块状元素的默认宽度为100% b) 当给元素设置宽度为100%时,继承父元素的宽度 c) 通常使用宽度自适应实现通栏效果 二.高度自适应 语法: ...

  2. css 宽高自适应的div 元素 如何居中 垂直居中

    在我们 编写css 样式的时候经常会遇见一个问题 那就是一个 宽高未知的元素 要让他 垂直居中如何实现这个呢 下面是我常用的两种方法 上代码 下面的是 结构代码 <div class=" ...

  3. css控制图片拉伸不变形,css+background实现 图片宽高自适应,拉伸裁剪不变形

    图片宽高不固定 ,一样实现自适应,拉伸裁剪不变形,适应各大兼容性. 下面咱们在网上找两张宽高不一样的照片: No.1                                          ...

  4. CSS 垂直居中、水平居中及流失布局宽高自适应

    CSS 垂直居中.水平居中及流失布局宽高自适应,在工作中,经常遇到某个元素如何居中,因此介绍一种简单的居中方式.同时,也经常遇到,上到下布局,当顶部动态变化时,及高度不固定,但是底部如何动态铺满父元素 ...

  5. css 百分比 怎么固定正方形_css样式写出三角形,宽高自适应的正方形,扇形!...

    闲来无事练习一下常见的css样式,希望大家能指点一二! 1用css实现一个三角形!原理用border属性 <! 实现它的原理那就要弄明白border属性, border是一个复合属性 borde ...

  6. 通过宽高自适应设计两栏布局和三栏布局

    1.两栏布局 我们要实现下面这样一个东西:两栏,左边一栏,右边一栏,左边宽高固定,右边宽高自适应,见下图: ✍我们有两种解决办法:(1)给右边盒子加外边距(2)calc函数的运用 第一种方法:(1)给 ...

  7. CSS学习笔记八——宽高自适应

    宽高自适应 一.宽度自适应 二.高度自适应 三.浮动元素的高度自适应 四.窗口自适应 五.结语 一.宽度自适应 不写宽度或者写 width:auto就表示宽度自适应,可用于横栏或导航栏. 与 widt ...

  8. 【CSS笔记】CSS设置元素堆叠顺序、元素宽高自适应、calc数学函数

    目录 一.堆叠顺序 1.1.默认堆叠顺序 1.2.设置堆叠顺序 二.宽高自适应

  9. 宽高自适应_css样式写出三角形,宽高自适应的正方形,扇形!

    闲来无事练习一下常见的css样式,希望大家能指点一二! 1用css实现一个三角形!原理用border属性 <!DOCTYPE html> <html> <head> ...

最新文章

  1. pandas中的基本功能
  2. java 遍历list 性能_java list三种遍历方法性能比較
  3. 使用axis2进行WebService的开发
  4. 【GAN优化】GAN优化专栏上线,首谈生成模型与GAN基础
  5. struts2几种result type探究
  6. 如何让其他机器访问你的oracle数据库
  7. 二维动画作品_「咻动画」二维动画制作中角色造型的设计要点
  8. GO 语言编程 windows 环境搭建
  9. 微信自动抢红包软件被判赔 475 万;日本科学家打破网速全球纪录;JavaScript蝉联最受欢迎编程语言|极客头条...
  10. 识别和非识别关系之间有什么区别?
  11. Android 学习资源收集
  12. 【理论篇】是时候彻底弄懂BERT模型了(建议收藏)
  13. 联想笔记本系统重装,联想电脑重装系统
  14. HTML三种对密码加密的方法
  15. java基于springboot+vue的学生宿舍报修管理系统(源码+数据库+Lw文档)
  16. SPSS中T检验的作用以及使用前提
  17. python换零钱有多少种方案_python练习题4.15换硬币(修正)
  18. java安装完后桌面怎么没有快捷方式_关于Eclipse在文件夹可以打开,在桌面建立快捷方式却无法打开的问题...
  19. linux 关闭桌面休眠,Linux关闭休眠和屏保模式
  20. windows redis 假死处理

热门文章

  1. php怎么使得字体滚动,滚动文字+字体特效代码(全集)
  2. python单词反转_python文本 字符串逐字符反转以及逐单词反转
  3. comsol临时文件夹中有不支持的字符_文件名中不能包含的字符
  4. ofb模式_密码学中的输出反馈模式(OFB)
  5. 测试私有方法 重构_一个全栈工程师重构之路:中小公司 DevOps 落地实践
  6. python日历模块_Python日历模块| setfirstweekday()方法与示例
  7. MySQL 快速创建千万级测试数据
  8. art-template用户注册方法
  9. WPF 使用NotifyIcon控件
  10. java 简单的加法 递归 从A加到B