IE 8'de çalışmayan rgba ile CSS arka plan şeffaflığı


110

Bu CSS'yi a'nın arka plan opaklığı için kullanıyorum <div>:

background: rgba(255, 255, 255, 0.3);

Firefox'ta iyi çalışıyor, ancak IE 8'de çalışmıyor. Nasıl çalışmasını sağlayabilirim?

Yanıtlar:


73

1x1 pikselden daha büyük (otuz nokta teşekkürler) ve arka planınızın şeffaflığına uygun bir png oluşturun.

DÜZENLEME: IE6 + desteğine geri dönmek için, png için bkgd öbek belirleyebilirsiniz, bu, desteklenmiyorsa gerçek alfa saydamlığının yerini alacak bir renktir. Örneğin gimp ile düzeltebilirsiniz.


2
Evet. rgba()renk değerleri IE 8'de desteklenmiyor.
Paul D. Waite

11
Olası bir sorunu önlemek için, aşağıdakilerden başka herhangi bir boyut kullanın 1x1: stackoverflow.com/questions/7764751/…
otuzdot

43
2003'te kabul edilebilir, ancak 2013'te kabul edilemez. Eski IE'de biraz simüle edilmiş destek için -ms-filtresini kullanın veya daha iyisi, sadece görmezden gelin. IE8 kullanan insanlar - sınır yarıçapı, şeffaf arka plan vb. Görmemekle cezalandırılmayı hak ediyor.
Evgeny

21
@EugeneXa Müşterilerim için çalışıyorum, tam tersi değil. IE8 kullanıyorlarsa, destekliyorum. Potansiyel müşterileri cezalandırmak iyi bir iş değildir.
Eli

14
@EugeneXa Sitelerimde% 10'a yakın ve genellikle iyi müşteriler. Burada tek bir doğru cevap yok. Matematiği yapın ve sizin için neyin işe yaradığını bulun. Bazı siteler için% 6 bile çok büyük olabilir! Hiçbir kullanıcı cezalandırılmayı hak etmez. Bence bu tavrından pişman olacaksın.
Eli

241

IE'de RGBA ve HSLA arka planını simüle etmek için, aynı başlangıç ​​ve bitiş rengine sahip bir gradyan filtresi kullanabilirsiniz (alfa kanalı, HEX değerindeki ilk çifttir)

background: rgba(255, 255, 255, 0.3); /* browsers */
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#4cffffff', endColorstr='#4cffffff'); /* IE */

2
Bu bir tedavi işe yarıyor, ancak ne yazık ki öğe dinamik olarak gizlenmişse ve jQuery kullanılarak yeniden gösteriliyorsa çalışmayı durduruyor gibi görünüyor ...
jackocnr

rgba IE filtresi çok kullanışlıydı ve> ie7
codingbbq

Filtre için 0,6'nın opaklığı nedir?
Si8

10
Şeffaflık için onaltılık kodlar (ilk çift) burada bulunabilir: ( stackoverflow.com/questions/15852122/hex-transparency-in-colors )
user1794295

2
Bu IE özel hex değerleri için bir hesap makinesi var !
nietonfir

14

Bunun en iyisi olduğuna inanıyorum çünkü bu sayfada alfa saydam arka plan oluşturmanıza yardımcı olacak bir araç var:

" Çapraz tarayıcı alfa şeffaf arka plan CSS'si (rgba) " (* artık archive.org'a bağlanmıştır)

#div {
    background:rgb(255,0,0);
    background: transparent\9;
    background:rgba(255,0,0,0.3);
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cFF0000,endColorstr=#4cFF0000);
    zoom: 1;
}

Ve hatırlayın filtrede her zaman RGBA onaltılık renk kullanın: eq # 004F80, # ed004F80
user956584

9

şeffaf png görüntüsü IE 6'da çalışmaz, alternatifler şunlardır:

CSS ile:

.transparent {

    /* works for IE 5+. */
    filter:alpha(opacity=30); 

    /* works for IE 8. */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";

    /* works for old school versions of the Mozilla browsers like Netscape Navigator. */
    -moz-opacity:0.3; 

    /* This is for old versions of Safari (1.x) with KHTML rendering engine */
    -khtml-opacity: 0.3; 

    /* This is the "most important" one because it's the current standard in CSS. This will work in most versions of Firefox, Safari, and Opera. */  
    opacity: 0.3; 
}

veya sadece jQuery ile yapın:

// a crossbrowser solution
$(document).ready(function(){ 
    $(".transparent").css('opacity','.3');
});

24
Arka plan alfa, opaklık ile aynı şey değildir (alt öğeyi de saydam yapmaz).
Alexey Smolyakov

1
Bu ne soruyu yanıtlamakta ne de CSS, jQuery (veya genel olarak JavaScript) üzerinden bir çapraz tarayıcı çözümü üzerinden uygulanmaktadır.
mystrdat

7

Geç olmasına rağmen, bugün bunu kullanmak zorunda kaldım ve burada , rgba'nın çalışma şekline çok benzer şekilde dinamik olarak bir png dosyası oluşturmanıza izin verecek çok kullanışlı bir php betiği buldum .

background: url(rgba.php?r=255&g=100&b=0&a=50) repeat;
background: rgba(255,100,0,0.5);

Komut dosyası buradan indirilebilir: http://lea.verou.me/wp-content/uploads/2009/02/rgba.zip

Herkes için mükemmel bir çözüm olmayabileceğini biliyorum, ancak çok fazla zaman kazandırdığı ve kusursuz çalıştığı için bazı durumlarda dikkate alınmaya değer. Umarım bu birine yardımcı olur!


2
Bu nasıl çalışır - rgba.php URL'si yalnızca desteklemeyen tarayıcılar tarafından rgbamı istenir ? Yoksa her zaman tüm kullanıcılar tarafından talep ediliyor ve gösterilmiyor mu?
Darren Cook

Umutlarım, tarayıcının bir istekte bulunmadan önce ikinci arka planı otomatik olarak görmesi ve ilkini yok saymasıdır. Ama bu en fazla eğitimli bir tahmin.
döner

7

CSS'de çoğunlukla tüm tarayıcı desteği RGBa kodu vardır, ancak yalnızca IE8 ve altındaki seviye RGBa css kodunu desteklemez. Bunun için çözüm burada. Çözüm için bu kodu izlemelisiniz ve sırasına göre gitmek daha iyidir, aksi takdirde istediğiniz gibi mükemmel çıktı elde edemezsiniz. Bu kod benim tarafımdan kullanılıyor ve çoğunlukla mükemmel. mükemmelse yorum yapın.

.class
 {
        /* Web browsers that does not support RGBa */
        background: rgb(0, 0, 0);
        /* IE9/FF/chrome/safari supported */
        background: rgba(0, 0, 0, 0.6);
        /* IE 8 suppoerted */
        /* Here some time problem for Hover than you can use background color/image */
        -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#88000000, endColorstr=#88000000)";
        /* Below IE7 supported */
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#88000000, endColorstr=#88000000);
 }

5

Opaklığı değiştirmek için css kullanırsınız. IE ile başa çıkmak için aşağıdaki gibi bir şeye ihtiyacınız olacak:

.opaque {
    opacity : 0.3;
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
    filter: alpha(opacity=30);
}

Ancak bununla ilgili tek sorun, kabın içindeki herhangi bir şeyin de 0.3 opaklık olacağı anlamına gelmesidir. Bu nedenle, HTML'nizi, içeriğinizi tutan şeffaf olanın içinde değil, başka bir kapsayıcıya sahip olacak şekilde değiştirmeniz gerekir.

Aksi takdirde png tekniği işe yarardı. Kendi başına sorunlara neden olabilecek IE6 için bir düzeltmeye ihtiyacınız olması dışında.


4
haha bir tarayıcının geri kalanı gibi davranmaması ve bu tarayıcının her bir sürümünün aynı tarayıcının diğer sürümleri gibi davranmaması gibi tipik bir durum ... bunu yalnızca Microsoft oldukça başarılı bir şekilde başarabilirdi ...
ClarkeyBoy

3
@Paul D. Waite: Tarayıcıların içeriği nasıl oluşturdukları dışında sunduğu pek çok özellik var. Spesifikasyondan sapmak bir özellik değildir (veya olmamalıdır).
Bobby Jack

@Paul D. Waite: Tamam, amacını anlıyorum, ama demek istediğim, IE'nin farklı sürümlerinin o kadar farklı davranması ki kendimi her sürüm için farklı bir stil sayfası oluşturmak zorunda buluyorum ... IE6 için farklı stil sayfalarım var, 7 ve 8 ... henüz tüm FF / Chrome / Opera / Safari için yalnızca bir stil sayfam var. @Bobby Jack: Seconded ...
ClarkeyBoy

@Bobby: Elbette, ama IE 8 standartlardan IE 7 veya IE 6'dan daha fazla sapmıyor, kesinlikle?
Paul D. Waite

@ClarkeyBoy: Elbette. IE 8 stil sayfamın IE 6 stil sayfamdan çok daha basit olduğunu düşünüyorum. IE tarayıcıların en tuhafıdır, ancak yavaş yavaş diğerleriyle uyumlu hale gelmektedir. Firefox, rgba()sürüm 3'e kadar desteklemiyordu ve Opera, sürüm 10'a kadar desteklemiyordu.
Paul D. Waite,


2

rgbaIE'de arka planı kullanmak için bir geri dönüş vardır.

Filtre özelliğini kullanmalıyız. o kullanırARGB

    background:none;
    -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
    zoom: 1;

bu geri dönüş rgba(255, 255, 255, 0.2)

#33ffffffSizinkine göre değiştirin .

Nasıl hesaplamak ARGBiçinRGBA


Sonsuza kadar bu ARGB'den RGBA'ya dönüştürücü arıyordum, Teşekkürler! web.archive.org/web/20131207234608/http://kilianvalkhof.com/…
Justin

1

Bu, IE8'deki sorunu çözmek için benim için çalıştı:

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";

Şerefe


1

Bu çözüm gerçekten işe yarıyor, deneyin. IE8'de test edildi

.dash-overlay{ 
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000)"; 
}

0

Çok basit bir şekilde önce rgb olarak artalan vermeniz gerekiyor çünkü Internet Explorer 8 rgba yerine rgb'yi destekleyecek ve sonra aşağıdaki gibi opaklık vermelisiniz. filter:alpha(opacity=50);

background:rgb(0,0,0);
filter:alpha(opacity=50);

0

Bu, IE x dahil çoğu tarayıcı için bir şeffaflık çözümü

.transparent {
    /* Required for IE 5, 6, 7 */
    /* ...or something to trigger hasLayout, like zoom: 1; */
    width: 100%; 

    /* Theoretically for IE 8 & 9 (more valid) */   
    /* ...but not required as filter works too */
    /* should come BEFORE filter */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

    /* This works in IE 8 & 9 too */
    /* ... but also 5, 6, 7 */
    filter: alpha(opacity=50);

    /* Older than Firefox 0.9 */
    -moz-opacity:0.5;

    /* Safari 1.x (pre WebKit!) */
    -khtml-opacity: 0.5;

    /* Modern!
    /* Firefox 0.9+, Safari 2?, Chrome any?
    /* Opera 9+, IE 9+ */
    opacity: 0.5;
}

0

Şimdiye kadar bulduğum en iyi çözüm , eski tarayıcılarda (IE 6+) opaklığı desteklemek için kendi blogunda David J Marland tarafından önerilen çözümdür :

.alpha30{
    background:rgb(255,0,0); /* Fallback for web browsers that don't support RGBa nor filter */ 
    background: transparent\9; /* backslash 9 hack to prevent IE 8 from falling into the fallback */
    background:rgba(255,0,0,0.3); /* RGBa declaration for browsers that support it */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cFF0000,endColorstr=#4cFF0000); /* needed for IE 6-8 */
    zoom: 1; /* needed for IE 6-8 */
}

/* 
 * CSS3 selector (not supported by IE 6 to IE 8),
 * to avoid IE more recent versions to apply opacity twice
 * (once with rgba and once with filter)
 */
.alpha30:nth-child(n) {
    filter: none;
}

0

Çok aradıktan sonra, benim durumumda çalışan aşağıdaki çözümü buldum:

.opacity_30{
    background:rgb(255,255,255); /* Fallback for web browsers that don't support neither RGBa nor filter */ 
    background: transparent\9; /* Backslash 9 hack to prevent IE 8 from falling into the fallback */
    background:rgba(255,255,255,0.3); /* RGBa declaration for modern browsers */
    -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF); /* IE 8 suppoerted; Sometimes Hover issues may occur, then we can use transparent repeating background image :( */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF); /* needed for IE 6-7 */
    zoom: 1; /* Hack needed for IE 6-8 */
}

/* To avoid IE more recent versions to apply opacity twice (once with rgba and once with filter), we need the following CSS3 selector hack (not supported by IE 6-8) */
.opacity_30:nth-child(n) {
    filter: none;
}

* Önemli: RGBA'dan ARGB'yi (IE'ler için) hesaplamak için çevrimiçi araçları kullanabiliriz:

  1. https://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
  2. http://web.archive.org/web/20131207234608/http://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.