height 自适应问题


何为高度自适应?

高度自适应就是高度能跟随浏览器窗口的大小改变而改变,典型的运用在一些后台界面中上面一栏高度固定用作菜单栏或导航栏,下面一栏高度自适应用于显示内容。高度自适应不像宽度自适应那样简单,在兼容浏览器方面也稍微复杂一些。

布局思路

在IE7+及chrome、firefox等浏览器中,高度自适应可以利用绝对定位来解决。但一个元素是绝对定位时,如果没有给它设定高度或宽度,则它的的高度和宽度是由它的top、right、bottom、left属性决定的,但这一法则在IE6中并不适用,因此在IE6中还得另辟蹊径。在IE6中给html设定padding,并不会撑大html元素的尺寸,这正是我们要利用的地方。

在IE7+ 和 W3C浏览器中的方案

看下代码:

<ignore_js_op>

再看下效果:

<ignore_js_op>

在IE6中的方案

好吧,不想再对IE6吐槽,只想尽快搞定它。

在IE6中的思路是,把html和body元素的高度设定为100%,即浏览器窗口的高度,然后利用padding-top在html元素上挤出一点空间来,因为绝对定位的最高参照物是参照html元素的,所以可以把顶栏绝对定位在html的padding-top那块空间上。这时body的高度就是html的高度(也是浏览器窗口的高度)减去html的padding-top的值,这也是ie6非常奇怪的一个特性,因为按照w3c盒模型来讲,增加了html元素的padding-top,则html元素的高度也会相应增加,这时浏览器窗口应该会出现垂直滚动条了。但IE6不会,html的增加了padding-top后,整个html元素的高度还是保持不变,即浏览器窗口的高度,变化的是body的高度减小了,用来抵消html的padding-top.

还是先看看代码吧:

<ignore_js_op>

再看下效果:

<ignore_js_op>

最终的兼容代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>高度自适应布局</title>
  6. <style>
  7. html,body{ height:100%;}
  8. body,div{ margin:0; padding:0; color:#F00;}
  9. * html{ padding-top:100px;}/*for ie6*/
  10. .top{ background:#36C; height:100px;}
  11. * html .top{ background:#36C; height:100px; position:absolute; top:0; width:100%;}/*for ie6*/
  12. .main{ background:#F90; position:absolute; width:100%; top:100px; bottom:0; overflow:auto;}
  13. * html .main{ background:#F90; position:static; height:100%;}/*for ie6*/
  14. </style>
  15. </head>
  16. <body>
  17. <div class="top">我是top,固定高度</div>
  18. <div class="main">我是main,高度随浏览器大小变化而变化<p style="height:500px;"></p></div>
  19. </body>
  20. </html>

复制代码

效果图:

非ie6

<ignore_js_op>

ie6

<ignore_js_op>

推广

这种方法也适用于顶栏与底栏高度固定,中间那栏高度自适应的三栏布局

时间: 2024-12-09 23:34:46

height 自适应问题的相关文章

div height 自适应高度 占满剩余高度的方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> html, body { margin: 0; padding: 0; height: 100%; } .if-top { display: block; border: none; width: 10

UITextView自适应内容的高度且实现光标总是距离键盘一段距离而滑动条却可以延伸到光盘

这几天遇到个想要实现的效果,如题,想了一段时间,昨天实现了,这里说下我实现的方法. 有时候我们使用uitextview编辑文本时,在输入框贴着键盘的情况下(即不设置UITextView的frame距离键盘一段距离)想让输入时光标一直距离键盘一段距离,这样用户的输入体验会好很多,UItextView没有发现这样的代理方法或属性来直接实现这一效果,于是我考虑用一个UIScrollVIew和一个UITextView来实现,即即将UITextVIew贴在UIScrollView上,然后通过UITextV

深入理解和应用display属性(一)

Display在官方定义:规定元素应该生成的框的类型.本文只重点分析常用的6个值:none.block.inline.inline-block.inherit.flex.其他table.list-item等都不再推荐使用. 一.None 此元素不会被显示.主要与visibility属性为hidden时相区分. 1) 当元素的none时,js可以获取此元素,但不能获取/设置此元素的可视化属性的值(但可以设置自定义属性的值),如Width.Height.background等Css属性的值,这也就表

Echars详解

简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9 /10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘.整合的能力. 支持折线图(区域图).柱状图(条状

大前端学习笔记整理【五】rem与px换算的计算方式

前言 这段时间的小项目中算是真正意义上使用了rem来进行移动端的页面布局,项目结束了我反思了一下之前的对于rem的使用...原来我以前对rem用法完全是在搞笑啊!!结合这次这个小项目,我觉得我也有必要对rem布局以及用法进行一次总结. ps.文笔可能不太好... 1.什么是rem 来自于鹅厂ISUX团队的解释如下: rem(font size of the root element)是指相对于根元素的字体大小的单位.简单的说它就是一个相对单位.看到rem大家一定会想起em单位,em(font s

图表制作工具之ECharts

简介 ECharts,缩写来自Enterprise Charts,商业级数据图表,一个纯Javascript的图表库,可以流畅的运行在PC和移动设备上,兼容当前绝大部分浏览器(IE6/7/8/9/10/11,chrome,firefox,Safari等),底层依赖轻量级的Canvas类库ZRender,提供直观,生动,可交互,可高度个性化定制的数据可视化图表.创新的拖拽重计算.数据视图.值域漫游等特性大大增强了用户体验,赋予了用户对数据进行挖掘.整合的能力. 支持折线图(区域图).柱状图(条状图

布局类组件介绍

DeviceOne平台包含2个基础的布局组件,do_ALayout和do_Linearlayout.所谓布局组件就是在IDE里设计界面,可以拖拽别的组件加到这个布局组件里作为这个布局组件内的一个部分. 注意:do_ScrollView也算是布局,也可以往里面拖拽其他组件,不过它比较特殊,它有且只有一个子节点.我们这里暂时不讨论. do_ALayout组件 这个是最基础最常用的布局组件,这里的 ALayout是AbsoluteLayout的缩写,表示绝对布局.绝对布局使用很简单,它内部的所有组件的

iscroll4 捕捉元素开发手机焦点图滑动效果

html标准代码格式 1 <div id="wrapper"> 2 <div id="scroller" > 3 <ul id="thelist"> 4 <li><img src="img/showpic_1.jpg"/></li> 5 <li><img src="img/showpic_2.jpg"/><

echarts各个配置项详细说明总结

echarts各个配置项详细说明总结 option = { // 全图默认背景 // backgroundColor: 'rgba(0,0,0,0)', // 默认色板 color: ['#ff7f50','#87cefa','#da70d6','#32cd32','#6495ed', '#ff69b4','#ba55d3','#cd5c5c','#ffa500','#40e0d0', '#1e90ff','#ff6347','#7b68ee','#00fa9a','#ffd700', '#66