CSS教程:关于网页中的透明元素

2016-02-20 00:14 5 1 收藏

想不想get新技能酷炫一下,今天图老师小编就跟大家分享个简单的CSS教程:关于网页中的透明元素教程,一起来看看吧!超容易上手~

【 tulaoshi.com - Web开发 】

CSS3草案中定义了{opacity: | inherit;}来声明元素的透明度,这已经得到了大多数现代浏览器的支持,而IE则很早通过特定的私有属性来实现的,所以HTML元素的透明效果已经无处不在了。首先看看A级浏览器所支持的用CSS实现元素透明的方案:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/) 浏览器最低
版本方案 Internet Explorer filter: "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) Opera Safari (WebKit)

实际上在IE8中,-ms-filter是filter的别名,两者区别是-ms-filter的属相值必须被单引号或双引号包围,而filter中则不是必须,而在IE8之前的版本中,filter的属性值必须不被单引号或双引号包围。

IE中的HTML元素要实现透明,则其必须具备layout,这样的元素有仅可读的属性hasLayout,且其值为true。具体情况如下:

等元素的一直为一直为。 设置的元素的 设置的元素的 设置的元素的 设置的元素必须具体以下两个条件之一,其才能为:IE8兼容模式和IE8以前的浏览器中,在标准(strict)模式下其的值是,如demo3就不行。 元素在怪癖模式(compat mode)下。 设置了的元素在IE8的兼容模式或IE8之前的浏览器中其,但在IE8的标准模式下则不会触发。 设置了的元素的。 元素的的属性值为。 在IE8标准模式下设置了的元素的一直为,如demo8。

关于hasLayout的更多详情可以看Exploring Internet Explorer HasLayout Overview和On having layout

从上面就可以看出IE实现HTML元素的透明如此混乱,为了向下兼容和自己的私有属性让IE上实现元素透明有多种方式,比如CSS Opacity实例中的demo1到demo8,虽然IE团队推荐实现透明的方式是:

{  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);  opacity: .5;}

而目前简单最好用的实现方式是如CSS Opacity中demo4这样:

{filter:alpha(opacity=30);opacity:.3;}

实际上目前最流行的JavaScript框架的设置样式方法都是应用这种方式,并且针对IE设置了来让元素的,但在IE8的标准模式下并不能触发,所以利用它们设置的元素的透明度时在IE8的标准模式下是失败的,这个bug在YUI、Prototype、jQuery和Mootools的最新版本中都存在,具体请在IE8标准模式下看demo9到demo11。同样由于在IE8中设置透明度的方式多种多样,所以利用JavaScript获取HTML元素的透明度值需要考虑多种情况,YUI完美解决了这个问题,Prototype比jQuery稍微周全一点,而Mootools直接是bug,具体可以在IE下看demo1到demo8的演示。从这个角度给4个框架来个排名的话,YUI第一、Prototype第二、jQuery第三、Mootools垫底。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

我简单的实现了设置和获取Opacity的函数,可以避开上面框架存在的bug,请在IE8标准模式下看demo12:

//设置CSS opacity 属性的函数,解决IE8的问题var setOpacity = function(el,i){  if(window.getComputedStyle){// for non-IEel.style.opacity = i;  }else if(document.documentElement.currentStyle){ // for IEif(!el.currentStyle.hasLayout){  el.style.zoom = 1;}if(!el.currentStyle.hasLayout){ //在IE8中zoom不生效,所以再次设置inline-block  el.style.display = 'inline-block';}el.style.filter = 'alpha(opacity='+ i * 100 +')';  }}//获取CSS opacity 属性值的函数//借鉴自http://developer.yahoel.com/yui/docs/YAHOO.util.Dom.html#method_getStylevar getOpacity = function(el){  var value;  if(window.getComputedStyle){value = el.style.opacity;if(!value){  value = el.ownerDocument.defaultView.getComputedStyle(el,null)['opacity'];}return value;  }else if(document.documentElement.currentStyle){value = 100;try { // will error if no DXImageTransformvalue = el.filters['DXImageTransform.Microsoft.Alpha'].opacity;} catch(e) {try { // make sure its in the documentvalue = el.filters('alpha').opacity;} catch(err) {}}return value / 100;  }}

不得不说,这些事都是IE整出来的

来源:http://www.tulaoshi.com/n/20160220/1631508.html

延伸阅读
标签: Web开发
块元素(block element)一般是其他元素的容器元素,块元素一般都从新行开始,它可以容纳内联元素和其他块元素,常见块元素是段落标签'P"。“form"这个块元素比较特殊,它只能用来容纳其他块元素。 如果没有css的作用,块元素会顺序以每次另起一行的方式一直往下排。而有了css以后,我们可以改变这种html的默认布局模式,把块元素摆...
响应网页设计目前在网页设计中无疑是一个热门话题。从某种程度上来说,响应网页设计概念的普及是非常应该的,因为用户以越来越多样化的方式访问网站。iPad,iPhone,Android移动设备,桌面,笔记本现在我们的网页设计必须在众多方式下使用。 让我们来了解响应网页设计的含意和原则。 响应网页设计的关键特征 认为网页设计是响应的,需要...
标签: Web开发
HTML只是赋予 内容 的手段,大部分HTML标签都有其意义(标签创建段落,标签创建标题等等)的,然而 和 标签似乎没有任何内容上的意义,听起来就像一个泡沫做成的锤子一样无用。但实际上,与CSS结合起来后,它们被用得十分广泛。 它们被用来组合一大块的HTML代码并赋予一定的信息,大部分用类属性 和标识属性 与元素联系起来,见CSS中级指...
标签: Web开发
css 解决覆盖父元素透明度 的效果 css兼容浏览器的透明度写法 1.{opacity:0.3;filter:alpha(opacity=30);} css是不能做到兼容覆盖透明度的 如果父元素设置了透明度,那么子元素是不能比父元素的透明度高,所以可以用以下办法实现类似效果 1.div id="bgttt" style="opacity:0.3;filter:alpha(opacity=30);position:absolute;left:0;top:0; ba...
标签: Web开发
关于CSS样式表 一.在学习css之前你应该掌握哪些基础知识 1.什么是网页,什么是超文本语言(html)。 2.会使用Dreamweaver等常用的网页编辑器。 Dreamweaver是现今最好的网站编辑工具之一,而Dreamweaver8增加的对CSS的支持更是你容易得来使用CSS,用它来给制作网页的CSS样式表会更简单、更方便。本教程教你如何利用Dre...

经验教程

549

收藏

64
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部