Nilai minimum dan maksimum indeks-z?

518

Saya memiliki div di halaman HTML saya. Saya menunjukkan div ini berdasarkan pada beberapa kondisi, tetapi div tersebut ditampilkan di belakang elemen HTML di mana saya mengarahkan kursor mouse.

Saya telah mencoba semua nilai untuk z-index dari 0 - 999999. Adakah yang bisa memberitahu saya mengapa ini terjadi?

Apakah ada nilai minimum atau maksimum properti Z-INDEX dari CSS?

.divClass {
     position: absolute; 
     left: 25px; 
     top: 25px; 
     width: 320px;
     height: 300px; 
     z-index: 1000; 
}
<table cellspacing="0" cellpadding="0" width="100%">
  <tr>
    <td>
      <asp:HyperLink ID="lnkProgram" runat="server"></asp:HyperLink>
    </td>
  </tr>
  <tr>
     <td>
         <div class="divClass">
           Some Data
         </div>
     </td>
  </tr> 
</table>

Saya menunjukkan dan menyembunyikan div dengan .divClassonclick <asp:hyperlink>menggunakan jQuery.

Sachin Gaur
sumber
Masalahnya mungkin tidak berkaitan dengan z-index secara khusus. Bisakah Anda memberikan beberapa contoh HTML dan CSS yang menggambarkan perilaku tersebut? Di browser apa Anda mengalami hal ini?
roryf
Hanya karena minat Anda dapat mencoba hal yang sama tanpa menggunakan tabel, hanya beberapa konten, tautan, dan div. Juga berikan warna latar belakang pada div hanya untuk memastikan saat Anda sedang berkembang.
roborourke
60
"mencoba semua nilai untuk properti Z-INDEX dari 0 - 999999". Saya merasa sulit untuk percaya.
sampathsris
4
@ Karaia Saya tidak, Dia bisa mencoba semua nilai z-index antara 0-999999 dengan JS ... Hanya sebuah pilihan ...
FullyHumanProgrammer
4
Tidak ada yang benar-benar menyebutkan display: nonedalam CSS-nya?
Mark Baijens

Jawaban:

386
┌──────────────────────┬───────────────────┬──────────────────────────────────┐
│ Browser              │ Max z─index value │ When exceeded, value changes to: │
╞══════════════════════╪═══════════════════╪══════════════════════════════════╡
│ Firefox 0 - 2        │ 2147483647        │ element disappears               │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Firefox 3            │ 2147483647        │ 0                                │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Firefox 4+           │ 2147483647        │ 2147483647                       │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Safari 0 - 3         │ 16777271          │ 16777271                         │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Safari 4+            │ 2147483647        │ 2147483647                       │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Internet Explorer 6+ │ 2147483647        │ 2147483647                       │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Chrome 29+           │ 2147483647        │ 2147483647                       │
├──────────────────────┼───────────────────┼──────────────────────────────────┤
│ Opera 9+             │ 2147483647        │ 2147483647                       │
└──────────────────────┴───────────────────┴──────────────────────────────────┘
Behnam Mohammadi
sumber
4
Saya percaya maksudnya negatif.
Gavin
41
Bagaimana Anda menemukan ini?
2540625
Ada nomor untuk Safari / Chrome / Firefox seluler?
2540625
30
Bagi yang berminat 2,147,483,647 = 2^31 - 1,. Ini adalah prima Mersenne.
Reggie Pinkham
2
@BehnamMohammadi, Bagaimana seharusnya perilaku standar?
Pacerier
306

http://www.w3.org/TR/CSS21/visuren.html#z-index

'indeks-z'

Nilai : otomatis | <integer> | mewarisi

http://www.w3.org/TR/CSS21/syndata.html#numbers

Beberapa tipe nilai mungkin memiliki nilai integer (dilambangkan dengan <integer>) atau nilai-nilai bilangan real (dilambangkan dengan <nomor>). Bilangan dan bilangan real ditentukan hanya dalam notasi desimal. <integer> terdiri dari satu atau lebih digit "0" hingga "9". <number> dapat berupa <integer>, atau bisa nol atau lebih digit diikuti oleh titik (.) Diikuti oleh satu atau lebih digit. Bilangan bulat dan bilangan real dapat didahului oleh "-" atau "+" untuk menunjukkan tanda. -0 sama dengan 0 dan bukan angka negatif.

Perhatikan bahwa banyak properti yang memungkinkan bilangan bulat atau bilangan real sebagai nilai sebenarnya membatasi nilai untuk beberapa rentang, seringkali ke nilai non-negatif.

Jadi pada dasarnya tidak ada batasan untuk nilai indeks-z dalam standar CSS, tapi saya kira sebagian besar browser membatasi untuk menandatangani nilai 32-bit (−2147483648 hingga +2147483647) dalam praktiknya (64 akan sedikit di atas, dan itu tidak masuk akal untuk menggunakan sesuatu yang kurang dari 32 bit hari ini)

Tamas Czinege
sumber
17
Penting untuk dicatat bahwa nilai indeks maksimum z pada Safari 3 adalah 16777271. Ini dinaikkan ke standar 32-bit di Safari 4 sehingga hanya menjadi masalah jika Anda menargetkan browser yang lebih lama. Juga, bahkan di Safari 3 apa pun di atas 16777271 akan ditutup pada saat itu, jadi kecuali jika Anda menggunakan nilai indeks-z yang sangat besar untuk memesan beberapa elemen, Anda tidak akan mengalami masalah (mis. Mengatur satu elemen ke nilai indeks-z 2147483647 akan memastikan bahwa elemen tetap berada di posisi teratas di browser apa pun, kecuali jika bersaing dengan elemen lain yang juga memiliki indeks-z> 16777271).
Doktor J
6
@ DoktorJ Adakah yang tahu mengapa ini 16777271? Tampaknya aneh bahwa itu lebih dari batas integer 24-bit unsigned.
Jools
2
@Jools menurut pengembang webkit Eric Seidel , itu adalah hasil dari menggunakan bitfield 24-bit -log base 2 (lg) = lg(16777271)
Janosch
2
@Janosch Maaf, saya tidak mengerti. lg (16777271) lebih besar dari 24. Saya akan berpikir bahwa bitfield 24-bit tidak cukup besar.
Jools
@Janosch, 2 ^ 24 = 16777216. 16777271dengan demikian akan membutuhkan 25 bit.
Pacerier
157

Tes saya menunjukkan bahwa itu z-index: 2147483647adalah nilai maksimum, diuji pada FF 3.0.1 untuk OS X. Saya menemukan bug integer overflow: jika Anda mengetik z-index: 2147483648(yaitu 2147483647 +1) elemen hanya berjalan di belakang semua elemen lainnya. Setidaknya peramban tidak mogok.

Dan pelajaran yang harus dipetik adalah Anda harus berhati-hati memasukkan nilai yang terlalu besar untuk z-indexproperti karena mereka membungkus.

Ran
sumber
57
Karena ini (2147483647) adalah nilai positif terbesar dari integer yang ditandatangani pada sistem operasi 32 bit ...
Badr Hari
4
Saya tidak berpikir angkanya akan membungkus jika nilainya lebih dari 2147483647 ... Saya pikir itu lebih mungkin bahwa browser hanya akan memperlakukan nomor apa pun di atas nilai ini sebagai nilai konstan, misalnya 0.
oliver-clare
3
Mungkin nilaimu menjadi negatif ... Misalnya -2147483647
Wahyu Fahmy
3
Di browser modern, lebih dari 2147483648 tidak memindahkan elemen di belakang elemen lain
Zach Saucier
25

Nilai minimum Z-index adalah 0 ; nilai maksimum tergantung pada jenis browser.

masukkan deskripsi gambar di sini

Santosh Khalse
sumber
4
Sebenarnya, indeks-z dapat berupa angka negatif. Elemen yang diposisikan dengan z-indeks negatif dipesan terlebih dahulu dalam konteks penumpukan, sehingga akan muncul di belakang semua elemen lainnya. Juga lihat dokumentasi: w3.org/TR/CSS22/visuren.html#z-index
magikMaker
17
Mudah disalin & Tempel: 2147483647
candjack
Indeks-Z dapat berupa angka negatif, tetapi untuk Contoh Safari untuk iOS 11.0.2 memiliki masalah dengan properti ini.
kris_IV
Santosh, dari mana Anda mendapatkan angka-angka ini? Apakah Anda menyalin dari jawaban Behnam dan menambahkan IE7 dan IE8?
CPHPython
21

Dari pengalaman, saya pikir maksimum yang benar z-indexadalah 2147483638.

Mohammad
sumber
7
Sepertinya kamu salah. Menurut tes yang dilakukan pada tahun 2009 oleh Eric Poidokas, nilai maksimum indeks-z (tanpa risiko menjatuhkan elemen saat melimpah) adalah 2147483647.
Martin
14

Indeks-Z hanya berfungsi untuk elemen yang memiliki position: relative;atau position: absolute;menerapkannya. Jika bukan itu masalahnya, kita perlu melihat halaman contoh untuk lebih membantu.

EDIT: Dokter yang baik telah memberikan penjelasan sepenuhnya tetapi versi cepatnya adalah bahwa minimum adalah 0 karena itu tidak bisa menjadi angka negatif dan maksimum - yah, Anda tidak akan pernah benar-benar perlu pergi di atas 10 untuk sebagian besar desain.

Roborourke
sumber
5
Saya telah menggunakan "z-index: -1;" sebelum "menenggelamkan" suatu elemen sehingga tidak dapat diklik. Ini mungkin bukan solusi yang populer, tetapi berhasil. : P
Ty.
17
Saya tahu ini agak terlambat, tetapi bekerja dengan posisi: diperbaiki juga.
TCCV
7
AFAIK, Anda dapat memiliki bilangan bulat negatif untuk nilai indeks-z.
d -_- b
Saya heran mengapa saya menentukan indeks-z: 1000, tetapi browser memberi tahu saya bahwa indeks-z adalah otomatis. Posisi melakukan trik.
Will Wu
6

Saya telah menemukan bahwa sering jika indeks-z tidak berfungsi karena induk / saudara kandungnya tidak memiliki indeks-z yang ditentukan.

Jadi, jika Anda memiliki:

<div id="1">
    <a id="2" style="z-index:2"></a>
    <div id="3" style="z-index:1"></div>
    <button id="4"></button>
</div>

item # 3, atau bahkan # 4, mungkin memperebutkan # 2 untuk ruang klik / arahkan, meskipun jika Anda menetapkan # 1 ke z-indeks 0, saudara kandung yang z-index menempatkan mereka di tumpukan independen sekarang berada di tumpukan yang sama dan akan z-indeks dengan benar.

Ini memiliki deskripsi yang bermanfaat dan cukup manusiawi: http://foohack.com/2007/10/top-5-css-mistakes/  

kcar
sumber
4
Sementara kita berada di topik, masalah umum lainnya adalah tidak memiliki position: relative;atau sesuatu seperti itu.
Ryan Taylor
1
Sebenarnya, baca kembali postingan aslinya. Anda benar, ini mungkin masalahnya.
Ryan Taylor
5

Seorang pengguna di atas mengatakan "baik, Anda tidak akan pernah benar-benar perlu pergi di atas 10 untuk sebagian besar desain."

Bergantung pada proyek Anda, Anda hanya perlu z-indeks 0-1, atau z-indeks 0-10000. Anda sering harus bermain dalam angka yang lebih tinggi ... terutama jika Anda bekerja dengan pemirsa lightbox (9999 tampaknya menjadi standar dan jika Anda ingin melampaui indeks-z mereka, Anda harus melebihi itu!)

Rocky
sumber
0

Meskipun INT_MAXmungkin merupakan taruhan yang paling aman, WebKit tampaknya menggunakan ganda secara internal dan dengan demikian memungkinkan angka yang sangat besar (dengan presisi tertentu).LLONG_MAXmis. berfungsi dengan baik (setidaknya dalam 64-Bit Chromium dan WebkitGTK), tetapi akan dibulatkan menjadi 9223372036854776000.

(Meskipun Anda harus mempertimbangkan dengan hati-hati apakah Anda benar- benar membutuhkan banyak indeks z ini ...).

Creshal
sumber