推荐阅读

布局模型(9)高度自适应

  网页布局中经常需要定义元素的高度和宽度,但很多时候我们希望元素的大小能够根据窗口或父元素自动调整,这就是我们常挂在嘴边的元素自适应。元素自适应在网页布局中非常重要,它能够使网页显示更灵活,可以适应在不同设备、不同窗口和不同分辨率下显示。

  元素宽度自适应设置起来比较轻松,只需要为元素的 width 属性定义一个百分比即可,且目前各大浏览器对此都完全支持。不过问题是元素高度自适应很容易让人困惑,设置起来比较麻烦。我们在前面也介绍过很多高度自适应的技巧,但都不是最完美的方法,既然元素都可以定义 height 属性,为什么不用 height 属性定义百分比来实现高度自适应呢?但是如果直接设置元素高度后却发现height 属性并没有起作用,这是为什么呢?

  例如,看下面一个简单示例,其中 XHTML 结构代码如下:

<div id="content">
<div id="sub">高度自适应</div>
</div>

CSS 布局代码:

/*[高度不能够自适应]*/
#content
{/*<定义父元素显示属性>*/
background
: #333;/*背景色*/
}
#sub
{/*<定义子元素显示属性>*/
width
:50%;/*父元素宽度的一半*/
height:50%;/*父元素高度的一半*/
background:#eee; /*背景色*/
}

  显示效果:

  在IE 6 中浏览。宽度能够自适应,高度不能自适应;在Firefox 2 中浏览。宽度能够自适应,高度不能自适应。

  这是不是父元素没有显式定义高度呢?是的,如果给它设置一个固定值,其子元素的百分比高度就能够起作用了。很显然这不是我们所要的结果,我们所希望的是子元素的高度能够随窗口而变化,是不是 body 没有设置高度呢?当设置 body 的 height 属性为 100%,在 IE 6 浏览器中可以看到子元素的百分比高度起作用,但在非 IE 浏览器中看不到效果。继 续设置 body 的父元素 html 的 height属性为 100%,这时终于看到了子元素的百分比高度在各大浏览器中起作用了。

  原来在IE 浏览器中html 的 height 属性默认为100%,body 没有设置值,而在非IE 浏览器中html和 body 都没有预定义 height 属性值。因此,解决高度自适应问题可以使用下面的代码:

/*[高度自适应]*/
html,body
{/*<定义html和body高度都为100%,即显式定义html和body高度>*/
height
:100%;
}
#content
{/*<定义父元素显示属性>*/
height
:100%;/*满屏显示*/
background: #333;/*背景色*/
}
#sub
{/*<定义子元素显示属性>*/
width
:50%;/*父元素宽度的一半*/
height:50%;/*父元素高度的一半*/
background:#eee; /*背景色*/
}

  在IE 6 中浏览和Firefox 2 中浏览,高度都能自适应:

  如果把子元素对象设置为浮动显示或者绝对定位显示,则高度依然能够实现自适应。如下面的 CSS 布局代码:

 

/*[高度绝对定位自适应]*/
html,body
{/*<定义html和body高度都为100%,即显式定义html和body高度>*/
height
:100%;
}
#content
{/*<定义父元素显示属性>*/
height
:100%;/*满屏显示*/
position:relative; /*相对定位*/
background: #333;/*背景色*/
}
#sub
{/*<定义子元素显示属性>*/
width
:50%;/*父元素宽度的一半*/
height:50%;/*父元素高度的一半*/
position:absolute; /*绝对定位*/
background:#eee; /*背景色*/
}


提示:您可以先修改部分代码再运行

  高度自适应对于布局具有重要的作用,我们可以利用高度自适应实现很多复杂布局效果。特别是对于绝对定位,突破了原来宽、高灵活性差的难题。充分发挥绝对定位的精确定位和灵活适应的双重能力。不过这种能力还是很有限度的,实践中读者应适当把握,毕竟绝对定位属于层布局模型,它与文档流属于不同的层面。

作者:yahu 发布时间:2008年10月22日 点击数: 收藏 打印文章
ed hardy nfl jerseys replica handbags christian louboutin louboutin
网站地图  |  关于站长  |  友情链接  |  版权声明top