ie6使用expression模拟fixed定位

 

<!doctype html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Document</title>

    <style>

    html{

        _background:url(about:blank); /* 阻止IE6中闪动 , 把空文件换成about:blank , 减少请求 */

    }

    /* 固定定位图层 */

    .fixed {

        position:fixed;

        _position: absolute;

        width: 200px;

        height: 200px;

        background: red;

        top:0;

        left: 0;

        _top:expression(documentElement.scrollTop+documentElement.clientHeight-this.offsetHeight);

        _left:expression(documentElement.scrollLeft+documentElement.clientWidth-this.offsetWidth);

    }

    </style>

</head>

<body>

    <div class="fixed"></div>

    <div style="height:1500px"></div>

</body>

</htm>

 

IE5 及其以后版本支持在CSS中使用expression,用来把CSS属性和Javascript表达式关联起来,这里的CSS属性可以是元素固有的属性, 也可以是自定义属性。就是说CSS属性后面可以是一段Javas cript表达式,CSS属性的值等于Javas cript表达式计算的结果。

 

以top为例:

documentElement.scrollTop   页面滚动条“卷”起来的高度值

documentElement.clientHeight  页面实际高度,包括padding

this.offsetHeight  元素实际高度,包括padding,scrollbar,border

documentElement.scrollTop+documentElement.clientHeight-this.offsetHeight = bottom为0时,如果用top来实现应当取多少值

 

top:0; = _top:expression(documentElement.scrollTop);

bottom:0; = _top:expression(documentElement.scrollTop+documentElement.clientHeight-this.offsetHeight);

left:0; = _left:expression(documentElement.scrollLeft);

right:0; = _left:expression(documentElement.scrollLeft+documentElement.clientWidth-this.offsetWidth);

 

注:尽量避免使用这种方式,因为这会产生大量计算,计算量轻松过万,对浏览器性能损耗很大,浏览器极容易死掉。

 

posted @ 2014-12-03 11:36  K13  阅读(169)  评论(0编辑  收藏  举报