79 votes

Comment déterminer l'indice z le plus élevé de votre document ?

Afin de définir un div contenant une image de texte transparent comme étant l'indice z le plus élevé de mon document, j'ai choisi le nombre 10 000 et cela a résolu mon problème.

Auparavant, j'avais deviné avec le chiffre 3 mais cela n'a eu aucun effet.

Existe-t-il un moyen plus scientifique de déterminer quel z-index est supérieur à celui de tous vos autres éléments ?

J'ai essayé de chercher cette métrique dans Firebug mais je ne l'ai pas trouvée.

3 votes

Notez que trouver le plus grand z-index n'est pas exactement pertinent, mais cela fonctionnera. Ce dont vous avez besoin est le plus grand z-index des éléments qui forment un contexte d'empilement et qui sont dans le même contexte d'empilement que l'élément que vous essayez de placer. En d'autres termes, si vous trouvez un élément qui est position: relative; z-index: 10000; qui est à l'intérieur d'un élément qui est position: relative; z-index: 100; alors le nombre que vous devez battre est 100, et non 10 000.

0 votes

51voto

Jimmy Chandra Points 3562

Voler un peu de code du site abcoder pour plus de clarté :

  var maxZ = Math.max.apply(null, 
    $.map($('body *'), function(e,n) {
      if ($(e).css('position') != 'static')
        return parseInt($(e).css('z-index')) || 1;
  }));

0 votes

Cette méthode semble être la plus courte et la plus efficace pour obtenir l'indice z que j'ai vue jusqu'à présent.

0 votes

La seule réponse que j'ai trouvée qui ne soit pas limitée au maximum pour un certain type d'élément. Je veux que mon z-index soit plus élevé que tous d'autres z-index et c'est un bijou.

1 votes

Élégant mais non utilisable car, de mdn de Math.max : "les deux se répandent (...) et apply échouera ou renverra un résultat erroné si le tableau contient trop d'éléments".

39voto

flo Points 315

Vous pourriez appeler findHighestZIndex pour un type d'élément particulier tel que <div> comme ça :

findHighestZIndex('div');

en supposant un findHighestZindex qui est définie comme suit :

function findHighestZIndex(elem)
{
  var elems = document.getElementsByTagName(elem);
  var highest = Number.MIN_SAFE_INTEGER || -(Math.pow(2, 53) - 1);
  for (var i = 0; i < elems.length; i++)
  {
    var zindex = Number.parseInt(
      document.defaultView.getComputedStyle(elems[i], null).getPropertyValue("z-index"),
      10
    );
    if (zindex > highest)
    {
      highest = zindex;
    }
  }
  return highest;
}

0 votes

Solution de contournement pour l'absence de getComputedStyle dans IE. erik.eae.net/archives/2007/07/27/18.54.15

0 votes

Pourquoi le limiter à un seul type d'élément ?

1 votes

@ChristopherJamesCalo, il s'agit d'une solution générique. Si vous utilisez '*' comme argument de la commande findHighestZIndex il obtiendra pour tous les éléments.

4voto

Rahul Points 8424

Il n'y a pas de propriété par défaut ou quoi que ce soit, mais vous pourriez écrire du javascript pour boucler tous les éléments et le découvrir. Ou si vous utilisez une bibliothèque de gestion du DOM comme jQuery, vous pouvez étendre ses méthodes (ou découvrir si elle le prend déjà en charge) afin qu'elle commence à suivre les indices z des éléments dès le chargement de la page, et il devient alors trivial de récupérer l'indice z le plus élevé.

4voto

Williham Totland Points 15798

Je pense que ce que vous observez est du vaudou. Sans avoir accès à votre feuille de style complète, je ne peux bien sûr pas vous le dire de manière fiable, mais il me semble probable que ce qui s'est passé ici est que vous avez oublié que seuls les éléments positionnés sont affectés par la fonction z-index .

En outre, z-index es ne sont pas attribuées automatiquement, mais uniquement dans les feuilles de style, ce qui signifie qu'en l'absence d'autre z-index éléments, z-index:1; sera au dessus de tout le reste.

0 votes

Je vais développer votre deuxième paragraphe pour expliquer que seule une z-index valeur de <> 0, et non auto crée en fait un nouveau contexte d'empilement.

3voto

Gareth Points 42402

La meilleure façon de résoudre ce problème est, à mon avis, d'établir des conventions sur les types de documents à utiliser. z-index es sont utilisés pour différents types d'éléments. Ensuite, vous trouverez le bon z-index à utiliser en regardant votre documentation.

3 votes

Bien que je convienne que c'est une meilleure pratique et pourrait aider dans la plupart des situations, cela n'aide pas si vous construisez un plugin ou script qui peut s'exécuter sur une page inconnue où votre script n'est pas au courant des conventions z-index utilisées. (désolé de commenter votre post vieux de 9 ans).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X