2011-03-25 66 views
2

我注意到在某些情况下,表单元素不能在IE8中变得透明。原来取决于位置:相对CSS标签。下面的HTML演示问题:在IE8中的不透明度取决于位置:相对

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>title</title> 

<style type="text/css"> 

.ie-opaque { 
    zoom : 1; 
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; 
    filter: alpha(opacity=50); 
} 

.relative { 
    position: relative; 
} 

</style> 


</head> 
<body> 

    <div class="ie-opaque"> 
     <form> 
     <fieldset> 
     <ol> 
      <li class="relative"> 
       <label for="test">label</label> 
       <input id="test"/> 
      </li> 
      <li class="relative"> 
       <button>push</button> 
      </li> 
      <li> 
       <label for="test">label</label> 
       <input id="test"/> 
      </li> 
      <li> 
       <button>push</button> 
      </li> 
     </ol> 
     </fieldset> 
     </form> 
    </div> 

</body> 
</html> 

在IE8项目3和4是透明的,1和2是不透明的。任何想法为什么?

+0

这是不是一个真正的答案(对不起),但它在某些如果不是所有的浏览器是常见的(虽然我更MSIE看到它在多宗)除非“位置:相对”,否则某些造型属性不适用。明确定义在一个元素上。我一直认为它主要是出于向后兼容的原因(当不是扁平化错误时)。 – 2011-03-25 14:29:10

回答

5

在Internet Explorer 7,8,9中,非静态子元素不会继承父项的不透明度。

解决方法:

  • IE9:给家长一个非静态位置。
  • IE8:让孩子继承过滤器风格。
  • IE7:让孩子继承过滤器风格,并给父母一个非静态位置。

此处链接:

http://www.jacklmoore.com/notes/ie-opacity-inheritance

+0

这是一个古老的问题,我甚至不记得我需要哪个项目,但听起来令人信服,所以我给了你一个upvote。 – 2012-11-07 14:20:34

+0

@PeterSzanto - 我认为这个答案应该被标记为接受 - 我有同样的问题,这个答案解决了它。 – Karol 2012-11-27 01:56:51

+0

@Carlos让它成为...... – 2012-11-27 09:14:18

0

使用具有“li”的类是不好的做法,因为它们被设计用于列出具有类似外观的类似信息,我假设MS选择忽略对使用类别为&的id的子元素的支持。

我会建议使用伪类(效果将不会显示在< = IE8浏览器),或JavaScript如果你需要针对具体的李。