最近遇到的一个小问题,记录下。
1.将z-index设为负值的话,元素会最贴近BODY,但是不能穿过body,之前我直接在body上加了个需隐藏的元素textarea,发现怎么也消失不了。最后加了个带背景的DIV把textarea套起来就可以了。用DIV把他遮住。
<body>
<div style="background:#fff">
<textarea id="log" cols="50" rows="10" ></textarea>
<input id="popBtn" type="button" value="pop a window" />
</div>
</body>
2.关于不同浏览器的position:absolute;height:100%的表现
1)看以下代码:
<body style="height:3000px">
<div id="test" style="position:absolute;top:0;left:0;width:100%;height:100%;backgroung:#ddd;">
</div>
</body>
开始以为test会遮住整个页面(高3000px),但结果是:
IE6:高3000px
ff:长度搞好是窗口高度
原因:height取值
值 | 描述 |
---|---|
auto | 默认。浏览器会计算出实际的高度。 |
length | 使用 px、cm 等单位定义高度。 |
% | 基于包含它的块级对象的百分比高度。 |
inherit | 规定应该从父元素继承 height 属性的值。 |
而将position设为absolute之后,此元素会相对于 static 定位以外的祖先元素进行定位,一级一级的向上找,直到找到 static 定位以外的祖先元素,并以此元素为基准进行定位。
所以在这时包含它的块级对象是window,应按window的高度取值。
为什么IE6是3000px呢?因为ie6会默认给body赋值position:relative;
2)那么将body的height:3000px.取消掉又是什么情况呢?
<body>
<div id="test" style="position:absolute;top:0;left:0;width:100%;height:100%;backgroung:#ddd;">
</div>
<div style="height:4000px;"></div>
</body>
浏览器表现如下:
ie6:只有很小的一截,约2、3行的样子
ff:长度刚好是窗口高度
FF的表现很好理解,但为什么ie6的高不是4000px(左右)呢?
原因是,在IE6中,如果不设定父级元素的高度,则设定层高x%是无用的
这个时候给body设height:100%就行了,但是此时test的高度仍然不是4000px,而是和标准浏览器一样,长度刚好是窗口高度。
3)IE与标准浏览器的body\html 100%高度算法的不同
A:将body设为100%
标准浏览器:
body = document
html = docuemnt
ie6:
body = window ;执行$("body").height()后,body = document,原因不明
html = window
B:将body设为100%、html设为100%
标准浏览器:
body = window
html = window
ie6:
body = document
html = window
总结:
对于标准浏览器:body 倚赖于html,html依赖于window。
如果html的height为auto,那么html=document.如果height为100%,那么html=window.
如果body的height为auto,那么body=document.如果height为100%,那么body=html.
所以,当body和html为height:100%的时候,各自才会倚赖于父元素。