前段时间做了一个项目,其中一个元素应该是绝对定位的,在其他浏览器都正常,唯独在IE里不行,不管是什么样版本的IE都不行,这非常不科学,感到非常困惑。
经过仔细的比对,发现是rem这个单位在其中起了作用。
首先,说下关于定位的写法。
通常要把一个元素定位到中间,写法大致有两种。
1:.absolute-auto{
position:absolute;
top:0;right:0;bottom:0;left:0;margin:auto;
}
2:.absolute-auto{
position:absolute;
top:50%;
margin: - 高度值的一半 auto;
}
.selector{
width:30rem;
height:30rem;
}
html如下。
<div class="selector absolute-auto"><div>
在这里,我首先采用第一种写法。
假如:html的font-size是20px;
selector的宽度就是600px;经过测试,所有的浏览器都支持rem,并且宽度值都为600px;表现一致,非常棒。
好,既然有了宽度,那么,他是不是可以定位到中间了。经过测试,大部分浏览器都可以实现,唯独在ie里不行。IE能识别到600px的宽度值,但是就是不能在水平方向居中,貌似margin:auto失效。奇怪的是,垂直方向又可以居中,如果,此时改成width:600px;就可以了。
很显然,这不是我们想要的解决方案,因为我们需要的是用rem来解决,所以,我们只能使用第二种绝对定位方式 。即
.absoute-auto{
position:absolute;
left:50%;
margin:auto;
margin-left:-15rem;
}
总结,经过上述验证,我是不是可以理解成 ie浏览器的margin:auto并不能识别rem。如果假设成立,是不是不会产生 margin-left与margin-right,事实上,是产生了margin-left与margin-right的。
那么,导致这个问题的原因是什么样呢。虽然问题解决了,但是,为什么会这样,问题的原因是什么。比较的让人困惑,希望有大牛能够提供解答。