2011-03-25 77 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如果你需要針對具體的李。