DIV屏幕居中的原理:
把DIV设置为absolute,即绝对定位,然后定位于页面距离顶部和左边50%的位置,
再将DIV向左,向上移动DIV本身宽和高的一半,即margin-left和margin-top,就可以实现水平居中和垂直居中了…
支持不同分辨率下的所有浏览器…..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <style type="text/css"> body{text-align:center;} #test{ /*绝对定位*/ position: absolute; border: 1px solid red; width:100px; height:100px; /*垂直居中*/ top:50%; margin-top:-50px; /*水平居中*/ left:50%; margin-left:-50px; } </style> </head> <body> <div id="test"></div> </body> </html> |
在进行网页布局设计的时候,经常会根据需要设置相对,绝对以及浮动定位最近突然发现了一个奇妙的现象:IE绝对定位元素神秘消失或被遮挡, 首先是IE绝对定位元素神秘消失,设置的绝对定位元素突然从IE浏览器下消失了,然而火狐能正常显示. 尝试对绝对定位元素进行清除浮动操作,IE下能显示,但是出现了莫名的留白,火狐下正常显示.至少这个现象表明,绝对定位元素在IE下神秘消失对相邻元素的浮动定位有关.查了相关资料,高人有这样的解释:
1.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,以及没有清除浮动时,IE6/7,FF中显示一致;
2.当绝对定位层的邻近浮动层的宽度不等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示;
3.当绝对定位层的邻近浮动层的宽度等于父层宽度时,以及没有清除浮动时,IE6不显示绝对定位层,IE7/FF显示;
4.当绝对定位层的邻近浮动层的宽度等于父层宽度时,有清除浮动时,IE6/7不显示绝对定位层,FF显示;
要解决这个BUG的方法也很简单,让绝对定位层不挨着浮动层放置就好了,还有个更简单的方法,在绝对定位元素和其他元素之间加一个空白的div。
再来看看绝对定位元素神秘消失被遮挡的现象
先了解一下所涉及到的几个定位特性:
1. 相对定位元素默认的z-index的数值是0。
2. 当两个相对定位同时出现时,代码靠后的z-index优先。
3. 子级遵循父级设定的z-index;如果子级设定了绝对定位、z-index,可以冲破父级显示
看下面的代码:
<div style="position:relative; background:#FF0000; width:200px; height:100px;"> <div style="position:absolute; background:#FFFF00; width:49px; height:50px; left:106px; top:310px; z-index:100"></div> </div> <div style="position:relative; background:#000000; width:200px; height:100px;"></div> <div style="position:relative; background:#9900FF; width:200px; height:100px;"></div> |
代码解释:上面是三个相邻的相对定位的层,在第一个层里加了个相对其绝对定位的层,按照理论,这个绝对定位的元素是在三个相对定位元素之上的,但是,实际却没有显示。尝试设置z-index值也没有效。
网上解决这个bug的办法一般用hack使B为负值,来降低 B 在IE下级别
但是这种方法在z-index为负值时,产生了新的ie bug
按照定位的特性,ie的这个bug是可以回避的
从表面上看 下面的层 遮住了上面的绝对定位层,实际上是下面的 层遮住了绝对定位的的父级层,只要将 该父级层 的z-index设定大于后面的层即可