Saya telah mengisolasi sedikit uji z-index
bug IE7 , tetapi tidak tahu bagaimana cara memperbaikinya. Saya telah bermain dengan z-index
sepanjang hari.
Apa yang salah dengan z-index
IE7?
Tes CSS:
input {
border: 1px solid #000;
}
div {
border: 1px solid #00f;
}
ul {
border: 1px solid #f00;
background-color: #f00;
list-style-type: none;
margin: 0;
padding-left: 0;
z-index: 1000;
}
li {
color: #fff;
list-style-type: none;
padding-left: 0;
margin-left: 0;
}
span.envelope {
position: relative;
}
span.envelope ul {
position: absolute;
top: 20px;
left: 0;
width: 150px;
}
Tes HTML:
<form>
<label>Input #1:</label>
<span id="envelope-1" class="envelope">
<input name="my-input-1" id="my-input-1" />
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</span>
<br><br>
<label>Input #2:</label>
<span id="envelope-2" class="envelope">
<input name="my-input-2" id="my-input-2" />
</span>
</form>
css
internet-explorer-7
z-index
rezna
sumber
sumber
Jawaban:
Z-index bukanlah pengukuran absolut. Dimungkinkan untuk elemen dengan indeks-z: 1000 berada di belakang elemen dengan indeks-z: 1 - selama masing-masing elemen memiliki konteks penumpukan yang berbeda .
Saat Anda menentukan indeks-z, Anda menentukannya relatif terhadap elemen lain dalam konteks susun yang sama, dan meskipun paragraf spesifikasi CSS pada indeks-Z mengatakan bahwa konteks susun baru hanya dibuat untuk konten yang diposisikan dengan indeks-z selain otomatis (artinya seluruh dokumen Anda harus menjadi satu konteks penumpukan), Anda memang membangun rentang yang diposisikan: sayangnya IE7 menginterpretasikan konten yang diposisikan tanpa z-indeks ini sebagai konteks susun baru.
Singkatnya, coba tambahkan CSS ini:
atau mendesain ulang dokumen sedemikian rupa sehingga rentang Anda tidak memiliki posisi: relatif lebih lama:
Lihat http://www.brenelz.com/blog/2009/02/03/squish-the-internet-explorer-z-index-bug/ untuk contoh serupa dari bug ini. Alasan pemberian elemen induk (amplop-1 dalam contoh Anda) indeks-z yang lebih tinggi berfungsi karena semua anak amplop-1 (termasuk menu) akan tumpang tindih dengan semua saudara kandung amplop-1 (khususnya, amplop-2).
Meskipun z-index memungkinkan Anda mendefinisikan secara eksplisit bagaimana hal-hal saling tumpang tindih, bahkan tanpa indeks-z, urutan peletakannya didefinisikan dengan baik . Akhirnya, IE6 memiliki bug tambahan yang menyebabkan kotak pilih dan iframe melayang di atas segalanya.
sumber
http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/
sumber
Coba beri elemen induk nilai indeks z yang lebih tinggi (bisa lebih tinggi dari nilai indeks z anak itu sendiri) untuk memperbaiki bug.
sumber
Saya mengalami masalah ini, tetapi pada proyek besar di mana perubahan HTML harus diminta dan menjadi masalah keseluruhan, jadi saya mencari solusi css murni.
Dengan menempatkan
position:relative; z-index:-1
konten tubuh utama saya, konten drop-down header saya tiba-tiba ditampilkan di atas konten tubuh di ie7 (itu sudah ditampilkan tanpa masalah di semua browser lain dan di ie8 +)Masalah dengan itu maka ini menonaktifkan semua tindakan hover dan klik pada semua konten dalam elemen dengan
z-index:-1
jadi saya pergi ke elemen induk dari seluruh halaman dan memberikannyaposition:relative; z-index:1
Yang memperbaiki masalah dan mempertahankan fungsi layering yang benar.
Terasa sedikit gila, tetapi bekerja sesuai kebutuhan.
sumber
Saya menemukan bahwa saya harus menempatkan penunjukan z-index khusus pada div dalam lembaran styel spesifik ie7:
div {z-index: 10; }
Untuk indeks-z dari div yang tidak terkait, seperti nav, ditampilkan di atas slider. Saya tidak bisa begitu saja menambahkan indeks-z ke slider slider itu sendiri.
sumber
html {z-index:1; position:relative;}
memungkinkan menu untuk melihat gambar korsel di IE.Jika pengindeksan z yang lebih tinggi yang disebutkan sebelumnya dalam node induk tidak akan sesuai dengan kebutuhan Anda, Anda dapat membuat solusi alternatif dan menargetkannya ke browser bermasalah baik dengan komentar bersyarat IE atau menggunakan deteksi fitur (lebih idealistik) yang disediakan oleh Modernizr.
Tes cepat (dan jelas berfungsi) untuk Modernizr:
sumber
Sepertinya bukan bug yaitu, hanya untuk pemahaman yang berbeda dengan standar css. Jika wadah luar tidak ditentukan indeks-z, tetapi elemen dalam ditentukan indeks-z yang lebih tinggi. Jadi saudara kontainer mungkin melapisi elemen indeks-z tinggi. Sekalipun seperti itu, itu hanya terjadi di IE7, tetapi IE6, IE8 dan Firefox tidak masalah.
sumber
Pada IE6 secara umum, elemen UI tertentu diimplementasikan dengan kontrol asli. Kontrol ini diberikan dalam fase yang sepenuhnya terpisah (jendela?) Dan selalu muncul di atas kontrol lain, terlepas dari indeks-z. Kotak-pilih adalah kontrol bermasalah lainnya.
Satu-satunya cara untuk mengatasi masalah ini adalah dengan membuat konten yang dirender oleh IE sebagai "jendela" yang terpisah - yaitu Anda dapat menempatkan kotak pilih di atas kotak teks, atau, lebih berguna, iframe.
Singkatnya, Anda harus meletakkan "on-hover" seperti hal-hal seperti menu di iframe untuk membiarkan IE menempatkan kontrol UI bawaan di atas.
Ini seharusnya diperbaiki di IE7 (lihat http://blogs.msdn.com/ie/archive/2006/01/17/514076.aspx ) tetapi mungkin Anda menjalankan dalam beberapa jenis mode kompatibilitas?
sumber
Bug ini tampaknya merupakan masalah yang terpisah dari konteks standar IE stacking stack yang terpisah. Saya punya masalah serupa dengan beberapa input yang ditumpuk (pada dasarnya sebuah tabel dengan pelengkapan otomatis di setiap baris). Satu-satunya solusi yang saya temukan adalah memberikan setiap sel nilai indeks-z yang menurun.
sumber
Jika Anda ingin membuat menu tarik-turun dan memiliki masalah dengan z-index, Anda dapat menyelesaikannya dengan membuat z-index dengan nilai yang sama (z-index: 999; misalnya) .. Cukup masukkan z-index di div induk dan anak dan itu akan memecahkan masalah. Saya memecahkan masalah dengan itu. Jika saya meletakkan indeks-z yang berbeda, tentu, itu akan menampilkan div anak saya di atas div orangtua saya, tetapi, begitu saya ingin memindahkan mouse saya dari tab menu ke div sub-menu (daftar dropdown), itu menghilang ... lalu saya meletakkan indeks-z dengan nilai yang sama dan menyelesaikan masalah ..
sumber
Saya menyelesaikannya dengan menggunakan alat pengembang untuk IE7 (dengan bilah alat) dan menambahkan z-index negatif ke wadah div yang akan di bawah div lainnya.
sumber