|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
使页面的字体变得更漂亮,更容易编排,使页面真正赏心悦目。
网页制造poluoluo文章简介:CSS3草案中界说了{opacity:|inherit;}来声明元素的通明度,这已失掉了年夜多半古代扫瞄器的撑持,而IE则很早经由过程特定的公有属性filter来完成的,以是HTML元素的通明效果已无处不在了。
CSS3草案中界说了{opacity:|inherit;}来声明元素的通明度,这已失掉了年夜多半古代扫瞄器的撑持,而IE则很早经由过程特定的公有属性filter来完成的,以是HTML元素的通明效果已无处不在了。起首看看A级扫瞄器所撑持的用CSS完成元素通明的计划:
扫瞄器最低
版本计划InternetExplorer4.0filter:alpha(opacity=xx);5.5filter:progid:DXImageTransform.Microsoft.Alpha(opacity=xx);8.0filter:"alpha(opacity=xx)";
filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=xx)";
-ms-filter:"alpha(opacity=xx)";
-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)";Firefox(Gecko)0.9(1.7)opacityOpera9.0opacitySafari(WebKit)1.2(125)opacity实践上在IE8中,-ms-filter是filter的别号,二者区分是-ms-filter的属相值必需被单引号或双引号包抄,而filter中则不是必需,而在IE8之前的版本中,filter的属性值必需不被单引号或双引号包抄。
IE中的HTML元素要完成通明,则其必需具有layout,如许的元素有仅可读的属性hasLayout,且其值为true。详细情形以下:
- body、img、table、tr、th、td等元素的hasLayout一向为true。
- type为text、button、file或select的input的hasLayout一向为true。
- 设置{position:absolute}的元素的hasLayout为true
- 设置{float:left|right}的元素的hasLayout为true
- 设置{display:inline-block}的元素的hasLayout为true
- 设置{height:xx}或{width:xx}的元素必需详细以下两个前提之一,其hasLayout才干为true:
- IE8兼容形式和IE8之前的扫瞄器中,在尺度(strict)形式下其display的值是block,如demo3就不可。
- 元素在怪癖形式(compatmode)下。
- 设置了{zoom:xx}的元素在IE8的兼容形式或IE8之前的扫瞄器中其hasLayout为true,但在IE8的尺度形式下则不会触发hasLayout。
- 设置了{writing-mode:tb-rl}的元素的hasLayout为true。
- 元素的contentEditable的属性值为true。
- 在IE8尺度形式下设置了{display:block}的元素的hasLayout一向为true,如demo8。
关于hasLayout的更多概况能够看ExploringInternetExplorer“HasLayout”Overview和Onhavinglayout
从下面就能够看出IE完成HTML元素的通明云云凌乱,为了向下兼容和本人的公有属性让IE上完成元素通明有多种体例,好比CSSOpacity实例中的demo1到demo8,固然IE团队保举完成通明的体例是:- {-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);opacity:.5;}
复制代码 而今朝复杂最好用的完成体例是如CSSOpacity中demo4如许:- {filter:alpha(opacity=30);opacity:.3;}
复制代码 实践上今朝最盛行的JavaScript框架的设置款式办法都是使用这类体例,而且针对IE设置了{zoom:1}来让元素的hasLayout为true,但在IE8的尺度形式下zoom其实不能触发hasLayout,以是使用它们设置hasLayout为false的元素的通明度时在IE8的尺度形式下是失利的,这个bug在YUI、Prototype、jQuery和Mootools的最新版本中都存在,详细请在IE8尺度形式下看demo9到demo11。一样因为在IE8中设置通明度的体例多种多样,以是使用JavaScript猎取HTML元素的通明度值必要思索多种情形,YUI完善办理了这个成绩,Prototype比jQuery略微全面一点,而Mootools间接是bug,详细能够在IE下看demo1到demo8的演示。从这个角度给4个框架来个排名的话,YUI第1、Prototype第2、jQuery第3、Mootools垫底。
我复杂的完成了设置和猎取Opacity的函数,能够避开下面框架存在的bug,请在IE8尺度形式下看demo12:- //设置CSSopacity属性的函数,办理IE8的成绩varsetOpacity=function(el,i){if(window.getComputedStyle){//fornon-IEel.style.opacity=i;}elseif(document.documentElement.currentStyle){//forIEif(!el.currentStyle.hasLayout){el.style.zoom=1;}if(!el.currentStyle.hasLayout){//在IE8中zoom不失效,以是再次设置inline-blockel.style.display=inline-block;}el.style.filter=alpha(opacity=+i*100+);}}//猎取CSSopacity属性值的函数//自创自http://developer.yahoel.com/yui/docs/YAHOO.util.Dom.html#method_getStylevargetOpacity=function(el){varvalue;if(window.getComputedStyle){value=el.style.opacity;if(!value){value=el.ownerDocument.defaultView.getComputedStyle(el,null)[opacity];}returnvalue;}elseif(document.documentElement.currentStyle){value=100;try{//willerrorifnoDXImageTransformvalue=el.filters[DXImageTransform.Microsoft.Alpha].opacity;}catch(e){try{//makesureitsinthedocumentvalue=el.filters(alpha).opacity;}catch(err){}}returnvalue/100;}}
复制代码 不能不说,这些事都是IE整出来的
在几乎所有的浏览器上都可以使用。15.以前一些非得通过图片转换实现的功能,现在只要用CSS就可以轻松实现,从而更快地下载页面。 |
|