Css利用js的expression实现的效果_7495

W
Shared by: cashinfo
Categories
Tags
-
Stats
views:
3
posted:
4/29/2010
language:
Chinese
pages:
4
Document Sample
scope of work template
							Css 利用 js 的 expression 实现的效果

[标签:作者]

[标签:来源]

[标签:时间]


IE5 及其以后版本支持在 CSS 中使用 expression,用来把 CSS 属性和 Javas
cript 表达式关联起来,这里的 CSS 属性可以是元素固有的属性,也可以是自定
义属性。就是说 CSS 属性后面可以是一段 Javas cript 表达式,CSS 属性的值等
于 Javas cript 表达式计算的结果。 在表达式中可以直接引用元素自身的属性
和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成
员函数中一样。

    给元素固有属性赋值

    例如,你可以依照浏览器的大小来安置一个元素的位置。

#myDiv {
position: absolute;
width: 100px;
height: 100px;
left: expression(document.body.offsetWidth - 110 + "px");
top: expression(document.body.offsetHeight - 110 + "px");
background: red;
}

    给元素自定义属性赋值

    例如,消除页面上的链接虚线框。 通常的做法是:

<a href="link1.htm" onfocus="this.blur()">link1</a>
<a href="link2.htm" onfocus="this.blur()">link2</a>
<a href="link3.htm" onfocus="this.blur()">link3</a>

  粗看或许还体现不出采用 expression 的优势,但如果你的页面上有几十甚
至上百个链接,这时的你难道还会机械式地 Ctrl+C,Ctrl+V 么,何况两者一比
较,哪个产生的冗余代码更多呢?
    采用 expression 的做法如下:

<style type="text/css">
a {star : expression(onfocus=this.blur)}
</style>
<a href="link1.htm">link1</a>
<a href="link2.htm">link2</a>
<a href="link3.htm">link3</a>

    说明:里面的 star 就是自己任意定义的属性,你可以随自己喜好另外定
义,接着包含在 expression()里的语句就是 JS 脚本,在自定义属性与
expression 之间可别忘了还有一个引号,因为实质还是 CSS,所以放在 style 标
签内,而非 s cript 内。OK,这样就很容易地用一句话实现了页面中的链接虚线
框的消除。不过你先别得意,如果触发的特效是 CSS 的属性变化,那么出来的结
果会跟你的本意有差别。例如你想随鼠标的移进移出而改变页面中的文本框颜色
更改,你可能想当然的会认为应该写为

<style type="text/css">
input
{star : expression(onmouseover=this.style.backgroundColor="#FF0000";
onmouseout=this.style.backgroundColor="#FFFFFF")}
</style>
<style type="text/css">
input {star :
expression(onmouseover=this.style.backgroundColor="#FF0000";
onmouseout=this.style.backgroundColor="#FFFFFF")}
</style>
<input type="text">
<input type="text">
<input type="text">

  可结果却是出现脚本出错,正确的写法应该把 CSS 样式的定义写进函数内,
如下所示:

<style type="text/css">
input {star : expression(onmouseover=function()
{this.style.backgroundColor="#FF0000"},
onmouseout=function(){this.style.backgroundColor="#FFFFFF"}) }
</style>
<input type="text">
<input type="text">
<input type="text">

    注意

  不是非常需要,一般不建议使用 expression,因为 expression 对浏览器资
源要求比较高。

实例:利用 css 里 expression 来实现界面对象的批量控制

    问题说明: 用过 CSS 样式我们就知道, 可以定义一批对象的 class 属性来指
定同一个样式来统一界面. 但如何统一同类型的对象的事件? 比如:界面有无数
个 <img src="**.jpg"> 如何实现鼠标经过此图片, 图片的 src 变成是
**_over.jpg?


解决方法: 使用 css 的 expression 方法,
具体实现要看看.css 的写法:

/*替换图片 CSS*/
#imgScript {       /*这里使用对象 ID 来通配样式, 也可以定义一个 css 函数*/
  star:expression(
       onmouseover = function()
       {
            /*替换图片*/
            if(this.hover != null){
              this.name = this.src;
              this.src = this.src.replace('.jpg', '_over.jpg');
              this.HasChg = 1;
          }
      },
      onmouseout = function()
    {
          /*还原本来的图片*/
        if(this.HasChg != null){
            this.src = this.name;
            this.HasChg = null;
       }
  }
)
}/*end imgScript*/

						
Related docs
Other docs by cashinfo