欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

你hack那么多啊,该怎么办_html/css_WEB-ITnose

程序员文章站 2022-04-27 08:16:18
...
当我们通过javascript来操作css样式的时候,假如我们停留在css2的阶段,会发现操作起来并不是很困难。虽然存在一些浏览器兼容的问题,但我们通过封装自己的函数,不仅可以设置样式还能够获取样式。但是,假如javascript碰到了css3会是什么样的情况呢?

我们知道,虽然css3目前出现在各个浏览器中,但是还没有当成一套规范正式发行。所以各个浏览器对于css3的属性支持情况不一。因此就出现了“css Hack”一说。很好,为什么?因为通过css Hack我们就可以在css的层次上兼容各个浏览器,不需要借用javascript来实现。但是五大浏览器有自己的Hack头(safari和chrome为:webkit。ie为:ms。opera为:o。火狐为:moz)。这也造成了一定程度上代码的冗余。而且我们在通过js来控制css3属性的时候,又有问题出现了。

这次出现的问题不是很难,归根结底就是代码冗余的问题(因为我们要分别对4种主流内核设置样式)所以下面我们就通过函数来解决这一问题:

 1 function setHack(ele,attr) { 2             //利用for-in循环遍历attr里面的属性 3             for (var i in attr){ 4                 var newi = i; 5                 //遍历是不是有- 6                 if(newi.indexOf("-")>0) { 7                     var num = newi.indexOf("-"); 8                     newi = newi.replace(newi.substr(num,2),newi.substr(num+1,1).toUpperCase()); 9                 }10                 //常规的设置属性的方式11                 ele.style[newi] = attr[i];12                 newi = newi.replace(newi.charAt(0),newi.charAt(0).toUpperCase());13                 ele.style["webkit" + newi] = attr[i];14                 ele.style["moz" + newi] = attr[i];15                 ele.style["ms" + newi] = attr[i];16                 ele.style["o" + newi] = attr[i];17             }18         }

函数说明:setHack函数有两个参数:ele代表的是你要为哪个元素设置属性,attr是一个json格式,包含了你所设置的属性和属性值,比如{"transform":"rotate(20deg)","transform-origin":"120px 120px"}。代码中的if判断主要是将属性中含有”-“变成大写字母的格式。后面则主要是加Hack头的核心部分。