Opacity CSS tidak berfungsi di IE8

143

Saya menggunakan CSS untuk menunjukkan teks pemicu untuk bagian slide-down jQuery: yaitu ketika Anda mengarahkan kursor ke teks pemicu kursor berubah menjadi pointer dan opacity dari teks pemicu dikurangi untuk menunjukkan bahwa teks memiliki aksi klik .

Ini berfungsi baik di Firefox dan Chrome, tetapi di IE8 opacity tidak berubah.

Saya sudah mencoba berbagai pengaturan CSS tanpa hasil.

Sebagai contoh

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;
}

Apa yang menghentikan IE mengubah opacity? Catatan: Saya sudah mencoba ini pada berbagai elemen yang berbeda, menukar urutan pernyataan CSS, dan hanya menggunakan yang IE sendiri. Saya juga sudah mencoba menggunakan

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

tetapi tidak berhasil.

Saya sudah kehabisan hal untuk mencoba mendapatkan modifikasi opacity bekerja di IE8.

Ada ide?

Marcus Downing
sumber
Pertanyaan terkait / duplikat ini memiliki jawaban Anda, saya pikir. stackoverflow.com/questions/859000/opacity-in-web-pages
Jeff Martin
Saya melihat pertanyaan itu - masalah adalah jawabannya: <br> <br> & nbsp; & nbsp; filter: alpha (opacity = 50); / * internet explorer / <br> & nbsp; & nbsp; opacity: 0,5; / fx, safari, opera, chrome * / <br> & nbsp; & nbsp; -ms-filter: "progid: DXImageTransform.Microsoft.Alpha (opacity = 50)"; / * IE8 * / <br> <br> tidak berfungsi untuk saya (saya baru mencobanya lagi untuk memeriksa ulang). Saya menerapkannya pada h3 yang hitam dan tebal. Di Firefox dan Chrome, pengaturan opacity mengubah judul menjadi abu-abu, seperti yang Anda harapkan, tetapi di IE8 tetap hitam.
oops - tidak menyadari Anda tidak bisa menggunakan HTML dalam komentar - tapi saya pikir Anda dapat melihat apa yang saya coba katakan
jika Anda mencoba gaya-gaya itu hanya pada div warna solid apakah itu berhasil? mungkin ada beberapa CSS lain yang saling bertentangan.
Jeff Martin
Bagus Ya - ketika saya melakukan div sederhana, berikan tinggi dan lebar dan warna latar belakang merah, dengan pengaturan opacity itu, ia bekerja di IE8. Itu muncul semi-buram. Saya berjuang untuk melihat apa masalahnya. Saya tidak mengubah opacity dari hal lain di stylesheet, jadi saya tidak bisa memikirkan apa yang bisa bertentangan dengannya hanya untuk IE.

Jawaban:

65

Tidak tahu apakah ini masih berlaku untuk 8, tetapi secara historis IE tidak menerapkan beberapa gaya untuk elemen yang tidak "memiliki tata letak."

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

Azeem. Tapi
sumber
9
IE tidak menerapkan beberapa gaya pada elemen yang tidak "memiliki tata letak."
Azeem. Tapi
4
Bagus! Terima kasih. Itu masalahnya. Elemen yang saya coba sesuaikan opacity untuk (misalnya h3) tidak "memiliki tata letak". Begitu saya memberi mereka beberapa, opacity bekerja. Yang saya lakukan adalah menambah lebar: 100%; ke h3. Terima kasih telah mengarahkan saya ke arah yang benar. Namun, tampaknya gila (jika tidak bermasalah) bahwa Internet Explorer melakukan ini.
51
IE tidak menerapkan banyak gaya ke banyak elemen.
danwellman
1
@danwellman dan kemudian melakukan banyak hal "menyenangkan" lainnya juga. Yay.
dudewad
Yang menarik adalah, bahwa IE7 tidak memerlukan 'tata letak ”. Saya menggunakan gambar latar belakang responsif pada elemen dengan tinggi nol dan padding-bottom: 100%dan di IE8 opacity tidak berpengaruh sampai saya mengatur ketinggian eksplisit. IE7 tidak membutuhkan ini.
Kout
158

Pengaturan ini (persis seperti yang saya tulis) telah membantu saya ketika saya membutuhkannya:

-moz-opacity: 0.70;
opacity:.70;
filter: alpha(opacity=70);
Gabriel McAdams
sumber
6
Terima kasih, saya percaya "filter: alpha (opacity = 70);" untuk IE <8. Namun, itu tidak berfungsi (untuk saya) di IE8 (saya baru saja memeriksa). -moz-opacity sekarang cukup banyak mati saya percaya, dan opacity adalah cara standar dalam melakukan sesuatu - jadi, secara alami, Microsoft tidak menggunakan cara itu dalam melakukan sesuatu (terlalu mudah).
15
Hanya dengan mengatur "opacity" dan "filter" seperti yang Anda gambarkan sudah cukup untuk membuatnya bekerja untuk saya di FF4 dan IE8. -moz-opacity tidak diperlukan.
demoncodemonkey
1
@Gabriel McAdams: filter: alpha (opacity = 70); bekerja (tetapi di IE 8 Only)
Poonam Bhatt
@ Gabriel Itu berhasil! Saya tidak akan memiliki masalah opacity lagi di IE 7/8!
MJCoder
1
Informasi lebih spesifik: Sebenarnya itu memudar dalam metode yang menghilangkan transparansi.
tmorell
49

Anda perlu mengatur Opacity terlebih dahulu untuk browser yang memenuhi standar, kemudian berbagai versi IE. Lihat Contoh:

tetapi kode opacity ini tidak berfungsi di ie8

.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);
}

Perhatikan bahwa saya menghapus -moz karena Firefox adalah peramban yang Memenuhi Standar dan garis itu tidak lagi diperlukan. Juga, -khtml didepresiasi, jadi saya menghilangkan gaya itu juga.

Selanjutnya, filter IE tidak akan divalidasi ke standar w3c, jadi jika Anda ingin halaman Anda divalidasi, pisahkan stylesheet standar Anda dari stylesheet IE Anda dengan menggunakan pernyataan IE jika seperti di bawah ini:

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

Jika Anda memisahkan quirks yaitu, situs Anda akan memvalidasi baik-baik saja.

Kevin Florida
sumber
3
Hanya dengan mengatur "opacity" dan "filter" seperti yang Anda gambarkan sudah cukup untuk membuatnya bekerja untuk saya di FF4 dan IE8. Bagian yang berlabel "/ * Selanjutnya 2 baris IE8 * /" tidak perlu.
demoncodemonkey
3
@demoncodemonkey: Benar. Itu semua tergantung pada versi yang Anda instal. Jika Anda ingin kompatibilitas maksimum, saya sarankan semuanya.
Kevin Florida
Benar, tetapi: "Untuk menjamin bahwa pengguna Internet Explorer 7 dan 8 mengalami filter, Anda dapat menyertakan kedua sintaksis yang tercantum di atas. Karena kekhasan dalam pengurai kami, Anda harus menyertakan sintaks yang diperbarui terlebih dahulu sebelum sintaks yang lebih lama agar filter berfungsi dengan benar dalam Tampilan Kompatibilitas (Ini adalah bug yang dikenal dan akan diperbaiki pada rilis final IE8). Berikut adalah contoh stylesheet CSS: "(sumber: tautan )
zrathen
@Kevin "Jika Anda ingin kompatibilitas maksimum, saya sarankan mereka semua". Kalau begitu, Anda seharusnya tidak menghapus -moz-opacity, kan?
Spooky
Kutipan tidak diperlukan untuk -ms-filter.
thdoan
17

Rupanya transparansi alpha hanya bekerja pada elemen level blok di IE 8. Atur tampilan: blok.

Bonnie V.
sumber
17

Menggunakan display: inline-block; karya pada IE8 untuk menyelesaikan masalah ini.

FWIW, opacity: 0.75bekerja pada semua browser yang memenuhi standar.

Crmpicco
sumber
5

CSS

Saya biasa menggunakan yang berikut dari CSS-Trik :

.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;
}

Kompas

Namun, solusi yang lebih baik adalah menggunakan mixin Opacity Compass , yang perlu Anda lakukan adalah @include opacity(0.1);dan akan mengatasi masalah lintas-browser untuk Anda. Anda dapat menemukan contoh di sini .

d4nyll
sumber
2

Tidak ada jawaban di atas yang berfungsi untuk saya, jadi saya hanya memberi tag DIV saya gambar latar transparan, yang bekerja dengan baik untuk semua browser.

Darren Riches
sumber
1

Kode ini berfungsi

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

Anda perlu menambahkan properti zoom agar berfungsi :)

mejiwara
sumber
1

Anda juga dapat menambahkan polyfil untuk mengaktifkan penggunaan opacity asli di IE6-8.

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

Ini adalah polyfil yang berdiri sendiri yang tidak memerlukan jQuery atau perpustakaan lain. Ada beberapa peringatan kecil yang tidak beroperasi pada style in-line dan untuk setiap style sheet yang memerlukan opacity polyfil, mereka harus mematuhi kebijakan keamanan asal-sama.

Penggunaannya sederhana

<!--[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>
Chris Marisic
sumber