IE、Firefox使用绝对定位(absolote) 网页居中布局 支持IE7,8,FF
2011-11-19 13:15
423 查看
对于企业官网来说,网站要有自己独特的个性,并且,不能使用太“老土”布局办法(使用table布局确实比较省事,但是当页面足够复杂,元素之间位置无序,甚至相互重叠,table就难以满足要求,而且对于一个大企业来说,使用table来控制布局,实在有点拿不上台面),再加上要适应不同分辨率屏幕的需求,布局就变得比较麻烦。
众所周知,使用绝对定位(position:absolute)的方式来布局能有效的处理复杂布局,但它有一个非常令人诟病的地方——在分辨率固定的情况下,绝对定位是网页布局的一大利器,而当要求网站适应不同分辨率时,问题来了,由于上面所有元素的位置是固定的,分辨率太小或太大,它都会偏离屏幕中央,这必然是客户所不能忍受的情况。
前段时间做过一个汽车企业的官网,在这方面有一些小小的收获,做到既能让元素按照自己的要求进行绝对定位,同时,又能让它适应不同分辨率的屏幕,始终在屏幕中央显示出来,并且,发现IE7中绝对定位的一个bug。
用一个简单的case来描述我的办法,这个case的需求是这样的:首先,整个网站固定高度和宽度,在1024*768分辨率内呈现所有的元素,这些元素的布局要求使用绝对定位,但必须保证在各种分辨率下,这块1024*768的显示区域都是居中靠上的。
『思路』
首先,让显示区域居中,无非是让div在页面中居中,网上有很多办法,我采取了其中一种:
其次,绝对定位是相对于父容器的,所以,如果我们不加任何包装,直接让元素在body内使用绝对定位,那必然会限死它的位置,我的做法是在body上覆盖一层width和height分别为100%的div,接着,创建一个1024*768大小的div相对于这个div居中,第三步,创建一个1024*768大小的绝对定位的div搁置在第二个div上,第四步,在第三个div内,你可以开始随意使用绝对定位的元素了,测试页面代码:
IE8、FF测试效果:
好吧!如果你在IE7下预览上述的页面,是有bug的,IE7效果见下图:
不得不说,IE7是我很不喜欢的一个版本,在IE8和FF下运行好好的样式,到IE7中,各种错乱,比如:onmouseover或onmouseout被触发后,div莫名消失,div无法正常包含div,等等,这真是一个让人非常痛恨的版本!好吧,不再纠缠IE7的是非,针对文章中错乱的问题,用如下办法解决:
去掉layout-bg样式中,text-align:center的定义,即恢复正常,这个办法是从这篇文章中找到的灵感。上述的代码经过IE7、8、FF测试,运行无误,有什么问题可以在评论区留言,希望能给某些朋友带来便利。
众所周知,使用绝对定位(position:absolute)的方式来布局能有效的处理复杂布局,但它有一个非常令人诟病的地方——在分辨率固定的情况下,绝对定位是网页布局的一大利器,而当要求网站适应不同分辨率时,问题来了,由于上面所有元素的位置是固定的,分辨率太小或太大,它都会偏离屏幕中央,这必然是客户所不能忍受的情况。
前段时间做过一个汽车企业的官网,在这方面有一些小小的收获,做到既能让元素按照自己的要求进行绝对定位,同时,又能让它适应不同分辨率的屏幕,始终在屏幕中央显示出来,并且,发现IE7中绝对定位的一个bug。
用一个简单的case来描述我的办法,这个case的需求是这样的:首先,整个网站固定高度和宽度,在1024*768分辨率内呈现所有的元素,这些元素的布局要求使用绝对定位,但必须保证在各种分辨率下,这块1024*768的显示区域都是居中靠上的。
『思路』
首先,让显示区域居中,无非是让div在页面中居中,网上有很多办法,我采取了其中一种:
margin-left:auto; margin-right:auto;
其次,绝对定位是相对于父容器的,所以,如果我们不加任何包装,直接让元素在body内使用绝对定位,那必然会限死它的位置,我的做法是在body上覆盖一层width和height分别为100%的div,接着,创建一个1024*768大小的div相对于这个div居中,第三步,创建一个1024*768大小的绝对定位的div搁置在第二个div上,第四步,在第三个div内,你可以开始随意使用绝对定位的元素了,测试页面代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html> <head> <style type="text/css"> body { margin: 0; background-color: #EBEFF2; font-family: Arial,Helvetica,sans-serif; font-size: medium; } #layout-bg { width: 100%; height: 100%; margin: 0; text-align: center; vertical-align: middle; } #main-panel { width: 1024px; height: 768px; margin-left: auto; margin-right: auto; background-color: #FDFFEE; } #absolute-bg { width:1024px; height:768px; position:absolute; } #d1 { width:500px; height:500px; background:#bdbdbd; position:absolute; left:30px; top:30px; z-index:8; } #d2 { width:400px; height:400px; background:#f2bdb3; position:absolute; left:300px; top:200px; z-index:7; } </style> </head> <body> <div id="layout-bg"> <!-- 1027*768窗体居中 --> <div id="main-panel"> <!-- 绝对定位父容器,大分辨率下,调整IE窗口大小可以看到显示区域跟随窗体变化而移动 --> <div id="absolute-bg"> <span style="position:absolute; left:100px; top:40px; z-index:10;">Absolute layout</span> <button style="position:absolute; left:110px; top:50px; z-index:9;">Button</button> <div id="d1"></div> <div id="d2"></div> </div> </div> </div> </body> </html>
IE8、FF测试效果:
好吧!如果你在IE7下预览上述的页面,是有bug的,IE7效果见下图:
不得不说,IE7是我很不喜欢的一个版本,在IE8和FF下运行好好的样式,到IE7中,各种错乱,比如:onmouseover或onmouseout被触发后,div莫名消失,div无法正常包含div,等等,这真是一个让人非常痛恨的版本!好吧,不再纠缠IE7的是非,针对文章中错乱的问题,用如下办法解决:
去掉layout-bg样式中,text-align:center的定义,即恢复正常,这个办法是从这篇文章中找到的灵感。上述的代码经过IE7、8、FF测试,运行无误,有什么问题可以在评论区留言,希望能给某些朋友带来便利。
相关文章推荐
- 怎么给网页写一个侧栏(横向两列布局-使用绝对定位和相对定位的方法)
- 关于使用绝对定位使元素垂直居中的问题
- 一个图片轮换显示的实现,使用DIV+JS,支持Firefox,IE,Safiri
- [原创]使用js+xml制作的IE和FF都支持的树型菜单(程序不到4k哦)
- FireFox不支持innerText以及IE同一url请求使用缓存数据导致的数据错乱
- 写 FireFox 和 IE 都支持的网页所要注意的事项
- IE和Firefox浏览器CSS网页布局不同点
- 类似google的可拖动div层网页布局,支持firefox,样式可自定义
- 使用CSS样式表方法绝对居中定位DIV浮动层
- IE和Firefox浏览器CSS网页布局不同点
- 禁止网页复制和右键菜单(支持IE FF)
- CSS学习笔记:使用绝对定位实现横向两列布局
- 图片垂直水平居中 支持IE6、IE7、IE8、FF等
- CSS之定位、居中、浮动及利用浮动设计网页布局和导航
- IE与FF不兼容网页布局CSS问题解决方案()
- 使用绝对定位+负外边距让DIV层水平垂直居中页面
- javascript支持IE和firefox(FF)的渐变透明效果
- IE和Firefox兼容性:DIV空白-网页居中
- 哀悼网页CSS 只有IE支持,FF不支持
- 黄聪:DIV+CSS建站经验总结,不同版本IE下CSS布局bug问题(IE5、IE6、IE7、IE8、火狐Firefox兼容)