ます。http://dancewithnet.com/2009/09/06/css-opacity/より転載
はじめに:このプロジェクトは透明であり、この時間は、などのコーナー、プロジェクターを、丸められ、また、クロスブラウザでなければならない - 今、最も一般的なアプリケーションのサイトであると思われ、ちょうどグーグル、Baiduの様々な使用法を急いで、 CSSファイルへの直接のコピーではなく、慎重にちょうどこの記事を見て、その原則を学び、話す慎重にかなり良い、復刻再版!
CSS3は、定義されたドラフト{opacity:<length> | inherit;}
透明性の要素を宣言するために、最新のブラウザでサポートされていますが、IEは非常に早い段階で特定のプライベートプロパティによってであるされているfilter
達成するために、そのHTML要素の透明性はすでにユビキタス。まず、見てみましょうAレベルのブラウザでサポートされているプログラムの透明要素を達成するためのCSS:
ブラウザ | 最小 バージョン |
スキーム |
---|---|---|
インターネットエクスプローラ | 4.0 | filter: alpha(opacity=xx); |
5.5 | filter: progid:DXImageTransform.Microsoft.Alpha(opacity=xx); |
|
8.0 | filter: "alpha(opacity=xx)"; |
|
Firefoxの(のGecko) | 0.9(1.7) | opacity |
オペラ | 9.0 | opacity |
サファリ(WebKitの) | 1.2(125) | opacity |
実際にIE8に、-msフィルタエイリアスフィルタであり、両者の差干支値-msフィルタは、モノまたは二重引用符で囲む必要があり、フィルタは必要なく、IE8、フィルタの前のバージョン属性値は、モノまたは二重引用符を囲まれていない必要があります。
HTML要素は、透明性を達成するために、すなわち、それはレイアウトを持っている必要があり、そのような要素は、読み取り専用属性き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}
の要素は、以下の2つの特定の条件のいずれか、でなければならないhasLayout
能力true
:- IE8互換モードと標準の下で(厳密)モードIE8以前ブラウザ、
display
値であるblock
ように、demo3ができません。 - 要素Quirksモード(互換モード)。
- IE8互換モードと標準の下で(厳密)モードIE8以前ブラウザ、
- 設定し
{zoom:xx}
IE8の互換モードまたはIE8ブラウザの要素のそれは前にhasLayout
あるtrue
が、標準モードでIE8がトリガされませんhasLayout
。 - セット
{writing-mode:tb-rl}
の要素です。hasLayout
true
- 要素は、
contentEditable
属性値true
。 - IE8標準モードでの設定
{display:block}
要素がhasLayout
されているtrue
として、demo8。
詳細についてはhasLayoutを見ることができますInternet Explorerの「HasLayout」の概要を探るとレイアウトを持つオン
それ以上の後方互換性のプライベートプロパティのように混沌とした透明HTML要素のためのIEを見てIE透明要素の実現を許可することができるからなど、さまざまな方法持つインスタンスをdemo8するCSSの不透明度DEMO1をにもかかわらず、IEチームが達成することをお勧めします透明性のある方法は次のとおりです。
{
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50);
opacity: .5;
}
現在の実装では、単純な使用するのが最適です。このようなdemo4にCSS不透明度として:
{
filter:alpha(opacity=30);
opacity:.3;
}
実際には最も人気のあるJavaScriptフレームワークのセットスタイルの方法は、この方法では、とIEの設定のために適用されている{zoom:1}
要素を許可するようhasLayout
にtrue
、標準モードでIE8がされてzoom
起動されないhasLayout
ので、それらが設定されている使用hasLayout
するfalse
要素を透明標準モードでIE8は、このバグの障害であるYUI(私はすでにYUIチームにこのバグを提出した、彼らはになります次のバージョンの修正、2.8.0の最新は2.9.0を楽しみにして、まだそこにあります)、プロトタイプ、jQueryのとMooToolsはそこの最新バージョンは、特定のIE8標準モードをご覧くださいdemo11にdemo9。また、IE8でのさまざまな方法の透明なので、JavaScriptを使用しているのでHTML要素はさまざまな状況を考慮する必要があるため、透明性の値を取得、この問題へのYUI完璧なソリューション、jQueryのより少し思慮深いもう少しプロトタイプ、およびMooToolsは、直接であるバグ具体的には、IEでDEMO1 demo8を参照してくださいプレゼンテーション。この点から単語をランク付け、YUIまず、プロトタイプ第二、第三のjQueryの、MooToolsは底部によってフレーム4。
私は単に設定と機能は、不透明度を取得し、あなたは上記のフレームワークのバグの存在を避けることができます実現し、してくださいIE8標準モードでdemo12を参照してください。
//は、問題を解決する、CSSの不透明度プロパティ関数を設定IE8の VARの setOpacity = 関数(EL、I){ IF(window.getComputedStyleが){ // 非居住のため el.style.opacity = I; } そう IF(文書。 documentElement.currentStyle){ // のIEのための IF(!el.currentStyle.hasLayout){ el.style.zoom = 1 ; } IF!(el.currentStyle.hasLayout){ //はIE8ズームに有効ではない、それが再び設定されていますブロックインライン el.style.display =「インラインブロック」; } 試み{ // 既存のフィルタかどうかをテスト // http://msdn.microsoft.com/en-us/library/ms532847%28VS.85%29.aspx IF (el.filters){ IF(el.filters( 'アルファ' )){ el.filters( 'アルファ')不透明度= 100 * I. ; } 他{ el.style.filter + = 'アルファ(不透明度=' * + I + 100 '); } } } キャッチ(E){ el.style.filter = 'アルファ(不透明度=' * + I + 100 ''); } } } // 関数CSS不透明度プロパティの値が取得 // http://developer.yahoel.com/yui/docs/YAHOO.util.Domから借用します#method_getStyle .htmlを VARgetOpacity = 関数(EL){ VARの値。 もし(window.getComputedStyleが){ 値 = el.style.opacity。 もし(!の値){ 値 = el.ownerDocument.defaultView.getComputedStyle(EL、NULL)[ '不透明' ]。 } 戻り値。 } そう であれば(document.documentElement.currentStyle){ 値 = 100 。 試す { // エラーになりますがない場合はDXImageTransformの 値= el.filters [ 'DXImageTransform.Microsoft.Alpha' ] .opacity。 } キャッチ(E){ しようと { // そのドキュメントで確認して 値= el.filters( 'アルファ' ).opacity。 } キャッチ(ERR){ } } 戻り値/ 100 。 } }
ます。https://www.cnblogs.com/JoannaQ/archive/2013/02/11/2909953.htmlで再現