Opaklık CSS'si IE8'de çalışmıyor


143

Bir jQuery aşağı açılır bölümü için tetikleyici metnini belirtmek için CSS kullanıyorum: yani tetikleyici metnin üzerine geldiğinizde imleç bir işaretçiye dönüşür ve metnin bir tıklama eylemi olduğunu belirtmek için tetikleyici metnin opaklığı azaltılır .

Firefox ve Chrome'da bu iyi çalışıyor, ancak IE8'de opaklık değişmiyor.

Herhangi bir başarı olmadan çeşitli CSS ayarlarını denedim.

Örneğin

HTML:

<h3 class="slidedownTrigger">This is the trigger text</h3>

CSS:

.slidedownTrigger
{
    cursor: pointer;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: alpha(opacity=75);
    -khtml-opacity: 0.75;
    -moz-opacity: 0.75;
    opacity: 0.75;
}

IE'nin opaklığı değiştirmesini engelleyen nedir? Not: CSS ifadelerinin sırasını değiştirerek ve sadece IE olanları kendi başlarına kullanarak çeşitli farklı öğeler üzerinde denedim. Ben de kullanmayı denedim

-ms-filter: "alpha(opacity=75)";

ama başarılı olamadı.

IE8'de opaklık modifikasyonu almak için şeyler tükendi.

Herhangi bir fikir?


Bu ilgili / yinelenen soru cevap sanırım. stackoverflow.com/questions/859000/opacity-in-web-pages
Jeff Martin

Bu soruyu gördüm - sorun cevap: <br> <br> & nbsp; & nbsp; filtre: alfa (opaklık = 50); / * internet explorer / <br> & nbsp; & nbsp; opaklık: 0.5; / fx, safari, opera, chrome * / <br> & nbsp; & nbsp; -MS filtre "progid: DXImageTransform.Microsoft.Alpha (opaklık = 50)"; / * IE8 * / <br> <br> benim için çalışmıyor (tekrar kontrol etmek için tekrar denedim). Siyah ve cesur bir h3'e uyguladım. Firefox ve Chrome'da opaklık ayarı, beklediğiniz gibi başlığı griye çevirir, ancak IE8'de siyah kalır.

ayy - yorumlarda HTML kullanmamanın farkında değildim - ama ne demeye çalıştığımı görebildiğini düşünüyorum

bu stilleri sadece düz bir renk div üzerinde denerseniz çalışırlar mı? belki de çelişkili başka CSS'ler de vardır.
Jeff Martin

Güzel bir. Evet - basit bir div yaptığımda, ona bir yükseklik ve genişlik ve kırmızı bir arka plan rengi verin, bu opaklık ayarlarıyla IE8'de çalışır. Yarı opak çıkıyor. Sorunun ne olduğunu görmek için mücadele ediyorum. Stil sayfasında başka bir şeyin opaklığını değiştirmiyorum, bu yüzden sadece IE için neyle çelişebileceğini düşünemiyorum.

Yanıtlar:


65

Bu hala 8 için geçerli, ancak geçmişte IE "düzeni" olmayan öğelere birkaç stil uygulamazsa hiçbir fikrim yok.

bkz. http://www.satzansatz.de/cssd/onhavinglayout.html


9
IE, "düzeni olmayan" öğelere çeşitli stiller uygulamıyor.
Azeem.Butt

4
Harika! Teşekkürler. Sorun buydu. Opaklığı ayarlamaya çalıştığım öğeler (örneğin h3) "düzene" sahip değildi. Onlara biraz verdim, opaklık işe yaradı. Tüm yaptığım genişlik eklemekti:% 100; h3'e kadar. Beni doğru yöne yönlendirdiğiniz için teşekkürler. Ancak, Internet Explorer bunu yapar (buggy değil) deli gibi görünüyor.

51
IE birçok öğeye çok fazla stil uygulamıyor.
danwellman

1
@danwellman ve sonra diğer birçok "eğlenceli" şeyler de yapar. Yaşasın.
dudewad

İlginç olan, IE7'nin “düzene” ihtiyaç duymamasıdır ”. Sıfır yükseklikte eleman üzerinde duyarlı arka plan görüntüsü kullanıyorum padding-bottom: 100%ve IE8'de açık yüksekliği ayarlayana kadar opaklık etkili olmadı. IE7 buna ihtiyaç duymaz.
Kout

158

Bunları ayarlamak (tam olarak yazdığım gibi) ihtiyacım olduğunda bana hizmet etti:

-moz-opacity: 0.70;
opacity:.70;
filter: alpha(opacity=70);

6
Teşekkürler, inanıyorum "filtre: alfa (opaklık = 70);" IE <8 içindir. Ancak, IE8 (sadece kontrol) içinde (benim için) çalışmıyor. -moz-opaklık artık inanıyorum ve opaklık bir şeyler yapmanın standart yolu - bu yüzden doğal olarak Microsoft bu tür şeyleri (çok kolay) kullanmıyordu.

15
Açıkladığınız gibi "opaklık" ve "filtre" yi ayarlamak, hem FF4 hem de IE8'de çalışmasını sağlamak için yeterliydi. -moz-opaklık gerekli değildi.
demoncodemonkey

1
@Gabriel McAdams: filtre: alfa (opaklık = 70); çalıştı (ancak IE 8'de)
Poonam Bhatt

@Gabriel Bu bir tedavi çalıştı! IE 7/8'de daha fazla donukluk sorunu yaşamam!
MJCoder

1
Daha spesifik bilgi: Aslında soluyor Şeffaflığı kaldıran yöntemde.
tmorell

49

Opaklığı önce standartlara uygun tarayıcılar, ardından çeşitli IE sürümleri için ayarlamanız gerekir. Örneğe bakın:

ancak bu opaklık kodu ie8'de çalışmaz

.slidedownTrigger
{
    cursor: pointer;
    opacity: .75; /* Standards Compliant Browsers */
    filter: alpha(opacity=75); /* IE 7 and Earlier */
    /* Next 2 lines IE8 */
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
}

Firefox'un Standartlara Uyumlu bir tarayıcı olması nedeniyle -moz'u kaldırdığımı ve bu satırın artık gerekli olmadığını unutmayın. Ayrıca, -khtml amortismana tabi tutulur, bu yüzden bu stili de ortadan kaldırdım.

Ayrıca, IE'nin filtreleri w3c standartlarına göre doğrulanmayacaktır, bu nedenle sayfanızın doğrulanmasını istiyorsanız, aşağıdaki gibi bir if ifadesi kullanarak standart stil sayfanızı IE stil sayfanızdan ayırın:

<!--[if IE]>
<link rel="stylesheet" type="text/css"  href="http://www.mysite.com/css/ie.css" />
<![endif]-->

Yani tuhaflıkları ayırırsanız, siteniz iyi bir şekilde doğrulanır.


3
Açıkladığınız gibi "opaklık" ve "filtre" yi ayarlamak, hem FF4 hem de IE8'de çalışmasını sağlamak için yeterliydi. "/ * Sonraki 2 satır IE8 * /" etiketli bölüm gerekli değildi.
demoncodemonkey

3
@demoncodemonkey: Doğru. Her şey hangi sürümü kurduğunuza bağlıdır. Maksimum uyumluluk istiyorsanız hepsini öneririm.
Kevin Florida

Doğru, ancak: "Hem Internet Explorer 7 hem de 8 kullanıcılarının filtreyi kullanmasını sağlamak için, yukarıda listelenen her iki sözdizimini de dahil edebilirsiniz. Ayrıştırıcımızdaki bir özellik nedeniyle, eski sözdiziminden önce güncellenmiş sözdizimini eklemeniz gerekir filtrenin Uyumluluk Görünümünde düzgün çalışması için (Bu bilinen bir hatadır ve
IE8'in

@Kevin "Maksimum uyumluluk istiyorsanız hepsini öneririm". O zaman, -moz-opaklığı kaldırmamalıydın değil mi?
Ürkütücü

-Ms-filter için tırnak işareti gerekmez.
thdoan

17

Görünüşe göre alfa saydamlığı yalnızca IE 8'deki blok düzeyi öğelerinde çalışır. Display: block'u ayarlayın.


17

Kullanılması display: inline-block;IE8 üzerinde çalışmalarını bu sorunu çözmek için.

FWIW, opacity: 0.75standartlara uygun tüm tarayıcılarda çalışır.


5

CSS

CSS-Tricks'ten aşağıdakileri kullanırdım :

.transparent_class {
  /* IE 8 */
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

  /* IE 5-7 */
  filter: alpha(opacity=50);

  /* Netscape */
  -moz-opacity: 0.5;

  /* Safari 1.x */
  -khtml-opacity: 0.5;

  /* Good browsers */
  opacity: 0.5;
}

Pusula

Bununla birlikte, daha iyi bir çözüm Opacity Compass mixin kullanmaktır, yapmanız gereken tek şey, @include opacity(0.1);tarayıcılar arası sorunları sizin için halledecektir. Burada bir örnek bulabilirsiniz .



2

Yukarıdaki cevapların hiçbiri benim için işe yaramadı, bu yüzden DIV etiketime şeffaf bir arka plan görüntüsü verdim, bu tüm tarayıcılar için mükemmel çalıştı.


1

Bu kod çalışıyor

filter: alpha(opacity = 50); zoom:1;

Çalışması için zoom özelliği eklemeniz gerekir :)


1

IE6-8'de yerel opaklık kullanımını etkinleştirmek için bir polifil de ekleyebilirsiniz.

https://github.com/bladeSk/internet-explorer-opacity-polyfill

Bu, jQuery veya diğer kütüphaneleri gerektirmeyen bağımsız bir polifildir. Hat içi stiller üzerinde çalışmayan birkaç küçük uyarı vardır ve opaklık gerektiren herhangi bir stil sayfası için aynı kökenli güvenlik politikasına uymaları gerekir.

Kullanım çok basit

<!--[if lte IE 8]>
    <script src="jquery.ie-opacity-polyfill.js"></script>
<![endif]-->

<style>
    a.transparentLink { opacity: 0.5; }
</style>

<a class="transparentLink" href="#"> foo </a>
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.