IE 8.に含まれる要素に影響を与えずにdivの背景の不透明度を設定したい。不透明度と色の管理者はそれを変更できます
私はそれを使用しましたが、IE 8では動作しませんでした
#alpha {
filter: alpha(opacity=30);
-moz-opacity: 0.3;
-khtml-opacity: 0.3;
opacity: 0.3;
}
そして
rgba(0,0,0,0.3)
また。
opacity
スタイルは、要素全体とその中のすべてに影響します。これに対する正しい答えは、代わりにrgbaの背景色を使用することです。
CSSはかなり単純です。
.myelement {
background: rgba(200, 54, 54, 0.5);
}
...最初の3つの数値は背景色の赤、緑、青の値で、4番目は「アルファ」チャンネル値で、opacity
値と同じように機能します。
詳細については、このページを参照してください: http://css-tricks.com/rgba-browser-support/
欠点は、IE8以前では機能しないことです。上記でリンクしたページには、動作しない他のブラウザもいくつかリストされていますが、それらはすべて非常に古いものです。 IE6/7/8を除く現在使用中のすべてのブラウザは、rgbaカラーで動作します。
良いニュースは、 CSS3Pie と呼ばれるハックを使用して、IEをこれで動作させることもできます。 CSS3Pieは、rgbaの背景色など、IEの古いバージョンに多くの最新のCSS3機能を追加します。
CSS3Pieを背景に使用するには、CSSに特定の-pie-background
宣言とPIE behavior
スタイルを追加する必要があります。これにより、スタイルシートは次のようになります。
.myelement {
background: rgba(200, 54, 54, 0.5);
-pie-background: rgba(200, 54, 54, 0.5);
behavior: url(PIE.htc);
}
お役に立てば幸いです。
[編集]
他の人が述べたように、それが価値があるものとして、IEのfilter
スタイルをgradient
キーワードと共に使用できます。 CSS3Pieソリューションは、実際にこの同じテクニックを舞台裏で使用しますが、IEのフィルターを直接いじる必要がなくなるため、スタイルシートはずっときれいになります。 (また、他の多くのNice機能も追加しますが、この議論には関係ありません)
あなたがしているのは与えることです
background: rgba(0,0,0,0.3)
&IE forこのフィルターを使用
background: transparent;
zoom: 1;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000); /* IE 6 & 7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000)"; /* IE8 */
ここからrgbaフィルターを生成できます http://kimili.com/journal/rgba-hsla-css-generator-for-internet-Explorer/
opacity
は、サブDOMツリー全体に対して設定します子孫にもカスケードしない特定の要素の不透明度を実際に設定することはできません。それはCSS opacity
の動作方法ではありません。
あなたができることは、1つのコンテナに2つの兄弟要素を持ち、透明なものの位置を設定することです:
<div id="container">
<div id="transparent"></div>
<div id="content"></div>
</div>
次に、透明なposition: absolute/relative
を設定して、コンテンツの兄弟がその上にレンダリングされるようにする必要があります。
rgba
は、色付きの背景の背景透明化を行うことができます要素のbackground-color
のrgba
色設定はもちろん機能しますが、背景としてのみ色を使用するように制限します。怖い画像はありません。 rgba
でグラデーションの停止色を指定した場合でも、もちろんCSS3グラデーションを使用できます。それも機能します。
ただし、rgba
は必要なブラウザでサポートされていない可能性があることに注意してください。
しかし、ページ全体を何らかの方法でマスキングしたい場合は、通常、次のスタイルのセットで個別のdiv
を追加することでこれを行います。
position: fixed;
width: 100%;
height: 100%;
z-index: 1000; /* some high enough value so it will render on top */
opacity: .5;
filter: alpha(opacity=50);
次に、コンテンツを表示すると、z-index
が高くなります。しかし、これらの2つの要素は、兄弟などの点では関連していません。あるべきように表示されます。上下に1つ。
含まれている要素のz-indexを高く設定してみてください。
このアプローチはどうですか:
<head>
<style type="text/css">
div.gradient {
color: #000000;
width: 800px;
height: 200px;
}
div.gradient:after {
background: url(SOME_BACKGROUND);
background-size: cover;
content:'';
position:absolute;
top:0;
left:0;
width:inherit;
height:inherit;
opacity:0.1;
}
</style>
</head>
<body>
<div class="gradient">Text</div>
</body>
もっと簡単な答えがあるかもしれません。background-color:#fff;のように、好きな背景色をコードに追加してみてください
#alpha {
background-color: #fff;
opacity: 0.8;
filter: alpha(opacity=80);
}
絶対位置以外の位置で不透明度機能を使用すると、子div全体に影響します。そのため、divを相互に配置せず、divの絶対位置を使用しないようにする別の方法です。上部divに背景色を使用しないでください。