Cascading Style Sheet (css) 的Expression 属性

 

Cascading Style Sheet (css) 的Expression 属性
 
这个星期看了点css,发现css还有这样一个可以调用js的属性,可进行css与js的互操作(暂且这么说,^_^
)。我在网上搜索了下,大致都是两篇文章,一篇是介绍防止被frame,一篇就是单纯的描述expression的用
途,第二篇的标题好像是“CSS中的行为——expression”,介绍语法的。(两篇都被好多人转载,也找不到
出处,网上很多,就不贴了)
感觉需要注意的地方有一下几个方面:
1.                  两个事件之间用逗号分隔,请注意不是分号。
比如:cc:expression(οnmοuseοver=…,οnmοuseοut=…);
2.                  如果事件调用设置属性时,要采用function,可内联,可外置。
如:cc:expression(οnmοuseοver=function(){
        this.style.color = "#960";
},οnmοuseοut=function(){
        this.style.color = "#000";
})
3.                  自定义属性可随意命名,但与expression之间要有冒号(因为这是css规则),自定义属性也就是
               我示例中的cc,你可以命名为amao,agou,可以包含数字,字母,下划线,特殊字符甚至可以
               是中文(我测试的可以),但是我发现一个奇怪的现象,就是命名中使用特殊字符,那么命名的第
               一个字符必须是特殊字符,并且不管是否第一个字符是特殊字符,都不能将特殊字符作为最后结
              束符。(正确的命名:@_中文,#test,1,webexp,34_er 等等,错误的命名:ad$,1_&)
4.                  通常情况下,expression 只能在中得到支持,在firefox及其他浏览器都不支持,但是我通过
               javascript发现firefox也可以支持。原因可能就是创建了一个css属性(除了这个我也想不到啥
               原因)。先看下代码:
CSS:
<style type="text/css">
.tdcss1 { BACKGROUND-COLOR: #F7F3F7; } 
.tdcss2 { BACKGROUND-COLOR: #FFF7FF; } 
</style>
JAVASCRIPT:
<script type="text/javascript">
function evalcls(obj)
{
       obj.cellSpacing=0;
       obj.cellPadding=0;
       for (i=0;i<obj.rows.length;i++) { 
              if(i%2==0){
                     obj.rows[i].className = "tdcss1"
              }else{
                     obj.rows[i].className = "tdcss2"; 
              } 
       }
}
function setstyle(){
       var Max = 100,i=0;
       var number = Math.round(Math.random() * Max);
       var obj_tab = document.getElementsByTagName('table');
       var tab_num = obj_tab.length;
       for(;i<tab_num;i++){
        //可以定位确定的对象,可以在firefox下使用expression
              obj_tab[i].style.number = ":expression(" + evalcls(obj_tab[i]) + ");";
       }
}
</script>
HTML:
<body οnlοad="setstyle();">
<table>
       <tr>
              <td><img src="images/tree1.jpg" /></td>
       </tr>
       <tr>
              <td>test</td>
       </tr>
       <tr>
              <td>test1</td>
       </tr>
       <tr>
              <td>test2</td>
       </tr>
</table>
<table>
       <tr>
              <td><img src="images/tree1.jpg" /></td>
       </tr>
       <tr>
              <td>test</td>
       </tr>
       <tr>
              <td>test1</td>
       </tr>
       <tr>
              <td>test2</td>
       </tr>
</table>
</body>
 
在上面代码中,一部分代码沿用了别人的示例,自己就增加了setstyle 函数。需要注意的地方就
是,body 的onload事件调用了这个setstyle,目的很明确:只有html加载完毕,才能获取到节点,
才能进行操作。Setstyle里用的是动态的创建自定义属性,本想测试 植入frame 的,但是可想而
知,我没有成功。后来想了下,可以用addRule或 insertRule创建css 解决 加载问题(如果说
client不支持js,那我也没法了,只希望能找到iframe文章的作者请教下)。
       5.       expression占浏览器资源,应该是加载页面时就调用js,防止被植入frame的办法也是下下策,
                 正如第一篇文章的作者说的,“堵住源头”才是根本,所以就是尽量少用,必须用的时候才用
 
文章比较杂乱,是自己记录下,方便以后自己查找,如果能帮助人那就更好了,呵呵!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值