Valore minimo e massimo di z-index?


518

Ho un div nella mia pagina HTML. Sto mostrando questo div in base a qualche condizione, ma il div viene visualizzato dietro l'elemento HTML in cui ho puntato il cursore del mouse.

Ho provato tutti i valori per z-index da 0 a 999999. Qualcuno può dirmi perché questo sta accadendo?

Esiste un valore minimo o massimo della proprietà Z-INDEX dei 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>

Sto mostrando e nascondendo il div con .divClassonclick tramite l' <asp:hyperlink>utilizzo di jQuery.


Probabilmente il problema non riguarda specificamente z-index. Puoi dare qualche esempio HTML e CSS che illustra il comportamento? In quali browser stai vivendo questo?
Roryf,

Solo per interesse potresti provare la stessa cosa senza usare la tabella, solo un po 'di contenuto, il link e il div. Metti anche un colore di sfondo sul div solo per essere certo mentre stai sviluppando.
Roborourke,

60
"provato tutti i valori per la proprietà Z-INDEX da 0 a 999999". Lo trovo difficile da credere.
sampathsris,

4
@Krumia Non lo so, potrebbe provare tutti i valori dell'indice z tra 0-999999 con JS ... Solo un'opzione ...
FullyHumanProgrammer,

4
Nessuno ha effettivamente menzionato il display: nonenel suo CSS?
Mark Baijens,

Risposte:


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                       │
└──────────────────────┴───────────────────┴──────────────────────────────────┘

4
Credo che significhi negativo.
Gavin,

42
Come ti sei imbattuto in questi?
2540625,

Qualche numero per Safari / Chrome / Firefox mobile?
2540625,

30
Per gli interessati 2,147,483,647 = 2^31 - 1,. È un numero primo di Mersenne.
Reggie Pinkham,

2
@BehnamMohammadi, Quale dovrebbe essere il comportamento standard?
Pacerier,

307

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

'Z-index'

Valore : auto | <intero> | ereditare

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

Alcuni tipi di valore possono avere valori interi (indicati con <intero>) o valori numerici reali (indicati con <numero>). Numeri e numeri reali sono specificati solo in notazione decimale. Un <intero> è composto da una o più cifre da "0" a "9". Un <numero> può essere <intero> oppure può essere zero o più cifre seguite da un punto (.) Seguito da una o più cifre. Sia i numeri interi che i numeri reali possono essere preceduti da un "-" o "+" per indicare il segno. -0 equivale a 0 e non è un numero negativo.

Si noti che molte proprietà che consentono un numero intero o reale come valore limitano effettivamente il valore a un intervallo, spesso a un valore non negativo.

Quindi sostanzialmente non ci sono limiti per il valore z-index nello standard CSS, ma immagino che la maggior parte dei browser lo limiti ai valori con segno a 32 bit (da -2147483648 a +2147483647) in pratica (64 sarebbe un po 'in alto, e non ha senso usare qualcosa di meno di 32 bit in questi giorni)


17
È importante notare che il valore massimo dell'indice z su Safari 3 era 16777271. Questo è stato elevato allo standard a 32 bit in Safari 4, quindi è solo una preoccupazione se si sta prendendo di mira i browser più vecchi. Inoltre, anche in Safari 3 qualsiasi cosa al di sopra di 16777271 viene limitata a ciò, quindi a meno che tu non stia usando valori z-index assurdamente grandi per ordinare più elementi, non dovresti avere problemi (cioè impostare un elemento su un valore z-index di 2147483647 assicurerà che l'elemento rimanga ai vertici in qualsiasi browser, a meno che non sia in concorrenza con un altro elemento che ha anche un indice z> 16777271).
Doktor J,

6
@DoktorJ Qualcuno sa perché è 16777271? Sembra strano che sia 56 in più rispetto al limite di un intero senza segno a 24 bit.
Jools,

2
@Jools secondo Eric Seidel , sviluppatore del webkit , è stato il risultato dell'uso di un bitfield a 24 bit -log base 2 (lg) = lg(16777271)
Janosch,

2
@Janosch Siamo spiacenti, non capisco. LG (16777271) è maggiore di 24. Avrei pensato che un bitfield a 24 bit non fosse abbastanza grande.
Jools

@Janosch, 2 ^ 24 = 16777216. 16777271richiederà quindi 25 bit.
Pacerier,

157

I miei test mostrano che z-index: 2147483647è il valore massimo, testato su FF 3.0.1 per OS X. Ho scoperto un bug di overflow di numeri interi: se si digita z-index: 2147483648(che è 2147483647 + 1) l'elemento va dietro tutti gli altri elementi. Almeno il browser non si arresta in modo anomalo.

E la lezione da imparare è che dovresti stare attento a inserire valori troppo grandi per la z-indexproprietà perché si avvolgono.


57
Perché questo (2147483647) è il più grande valore positivo di un numero intero con segno su un sistema operativo a 32 bit ...
Badr Hari

4
Non credo che il numero andrà a finire se il valore è superiore a 2147483647 ... Penso che sia più probabile che i browser considerino qualsiasi numero su questo valore come un valore costante, ad es. 0.
oliver-clare

3
Forse il tuo valore è appena diventato negativo ... Ad esempio -2147483647
Wahyu Fahmy il

3
Nei browser moderni andare oltre 2147483648 non sposta gli elementi dietro altri elementi
Zach Saucier,

25

Il valore minimo di Z-index è 0 ; il valore massimo dipende dal tipo di browser.

inserisci qui la descrizione dell'immagine


4
In realtà, z-index può essere un numero negativo. Gli elementi posizionati con indici z negativi vengono ordinati per primi in un contesto di sovrapposizione, quindi verranno visualizzati dietro tutti gli altri elementi. Vedi anche i documenti: w3.org/TR/CSS22/visuren.html#z-index
magikMaker

17
Facile da copiare e incollare: 2147483647
candlejack

L'indice Z può essere un numero negativo, ma per esempio Safari per iOS 11.0.2 ha un problema con questa proprietà.
kris_IV

Santosh, dove hai preso questi numeri? Hai copiato dalla risposta di Behnam e hai aggiunto IE7 e IE8?
CPHPython,

21

Dipende dal browser (sebbene l'ultima versione di tutti i browser dovrebbe raggiungere il massimo a 2147483638), così come la reazione del browser quando viene superato il massimo.

http://www.puidokas.com/max-z-index/



21

Per esperienza, penso che il massimo corretto z-indexsia 2147483638.


7
Sembra che tu abbia torto. Secondo i test effettuati nel 2009 da Eric Poidokas, il valore massimo dell'indice z (senza rischio di caduta di elementi in caso di overflow) è 2147483647.
Martin

14

Z-Index funziona solo per elementi che hanno position: relative;o position: absolute;applicati a loro. Se questo non è il problema, dovremo vedere una pagina di esempio per essere più utili.

EDIT: Il buon dottore ha già fornito la spiegazione più completa, ma la versione rapida è che il minimo è 0 perché non può essere un numero negativo e il massimo - beh, non dovrai mai andare oltre i 10 per la maggior parte dei progetti.


5
Ho usato "z-index: -1;" prima di "affondare" un elemento in modo che non possa essere cliccato. Probabilmente non è una soluzione popolare, ma funziona. : P
Ty.

17
So che è un po 'tardi, ma funziona anche con la posizione: risolto.
TCCV,

7
AFAIK, puoi avere numeri interi negativi per il valore dell'indice z.
d -_- b

Mi chiedo perché specifichi z-index: 1000, ma il browser mi ha detto che z-index attuale è auto. posizione fa il trucco.
Will Wu

6

Ho scoperto che spesso se z-index non funziona perché i suoi genitori / fratelli non hanno uno z-index specificato.

Quindi se hai:

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

l'articolo # 3, o anche il numero 4, potrebbe essere in conflitto # 2 per lo spazio clic / hover, anche se impostando # 1 su z-index 0, i fratelli che con z-index li mettono in stack indipendenti ora sono nello stesso stack e indicizzerà z correttamente.

Questa ha una descrizione utile e abbastanza umanizzata: http://foohack.com/2007/10/top-5-css-mistakes/  


4
Mentre siamo sull'argomento, un altro problema comune non sta avendo position: relative;o qualcosa del genere.
Ryan Taylor,

1
In realtà, rileggi il post originale. Hai ragione, questo è probabilmente il suo problema.
Ryan Taylor,

5

Un utente sopra dice "beh, non avrai mai davvero bisogno di andare oltre i 10 per la maggior parte dei disegni".

A seconda del progetto, potrebbero essere necessari solo gli indici z 0-1 o gli indici z 0-10000. Avrai spesso bisogno di giocare con le cifre più alte ... specialmente se stai lavorando con i visualizzatori di lightbox (9999 sembra essere lo standard e se vuoi superare il loro indice z, dovrai superarlo!)


0

Sebbene INT_MAXsia probabilmente la scommessa più sicura, WebKit apparentemente usa i doppi internamente e quindi consente numeri molto grandi (con una certa precisione). LLONG_MAXad es. funziona bene (almeno in 64-bit Chromium e WebkitGTK), ma verrà arrotondato a 9223372036854776000.

(Anche se dovresti considerare attentamente se davvero, hai davvero bisogno di così tanti indici z ...).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.