466 votes

z-index ne fonctionne pas avec un positionnement fixe

J'ai un div avec un positionnement par défaut (c'est-à-dire position:static ) et un div avec un fixed position.

Si je fixe les z-index des éléments, il semble impossible de faire passer l'élément fixe derrière l'élément statique.

    #over {
      width: 600px;
      z-index: 10;
    }

    #under {
      position: fixed;
      top: 5px;
      width: 420px;
      left: 20px;
      border: 1px solid;
      height: 10%;
      background: #fff;
      z-index: 1;
    }

    <!DOCTYPE html>
    <html>
       <body>
          <div id="over">
             Hello Hello HelloHelloHelloHelloHello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
          </div>  
          <div id="under">
          </div>
       </body>
    </html>

Ou sur jsfiddle ici : http://jsfiddle.net/mhFxf/

Je peux contourner ce problème en utilisant position:absolute sur l'élément statique, mais quelqu'un peut-il me dire pourquoi c'est ce qui se passe ?

(Il semble y avoir une question similaire à celle-ci, ( Positionnement fixe cassant z-index ) mais il n'y a pas de réponse satisfaisante, c'est pourquoi je pose la question ici avec mon exemple de code)

470voto

marflar Points 13293

Ajouter position: relative; à #over

    #over {
      width: 600px;
      z-index: 10;
      position: relative;    
    }

    #under {
      position: fixed;
      top: 5px;
      width: 420px;
      left: 20px;
      border: 1px solid;
      height: 10%;
      background: #f0f;
      z-index: 1;
    }

    <!DOCTYPE html>
    <html>
    <body>
        <div id="over">
            Hello Hello HelloHelloHelloHelloHello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
        </div>  

        <div id="under"></div>
    </body>
    </html>

Violon

14 votes

updates.html5rocks.com/2012/09/ est une excellente référence sur la façon dont les positions fixes, absolues et relatives interagissent avec le z-index.

0 votes

@marflar Mon plaisir. En fait, jetez un coup d'oeil à votre violon. Il y a un tag supplémentaire. </body> et une étiquette supplémentaire </html> à la fin.

2 votes

Voici un violon démontrant le contexte d'empilement. C'est expliqué aquí .

31voto

iamserious Points 2070

Depuis que votre over n'a pas de positionnement, le z-index ne sait pas où et comment la positionner (et par rapport à quoi ?). Il suffit de changer la position de la div over en relative, afin qu'il n'y ait pas d'effets secondaires sur cette div, et la div under obéira à votre volonté.

voici votre exemple sur jsfiddle : Violon

modifier : Je vois que quelqu'un a déjà mentionné cette réponse !

29voto

cusimar9 Points 2540

z-index ne fonctionne que dans un contexte particulier, à savoir relative , fixed o absolute position.

z-index pour un div relatif n'a rien à voir avec l'option z-index d'un div absolu ou fixe.

EDIT C'est une réponse incomplète. Cette réponse fournit de fausses informations. Veuillez revoir le commentaire et l'exemple de @Dansingerman ci-dessous.

3 votes

Pouvez-vous expliquer comment fonctionne le z-index dans un contexte particulier, et/ou fournir une référence ?

13 votes

Z-index affecte l'ordre de deux divs même si l'un est en position relative et l'autre en position absolue.

67 votes

Cette réponse est fausse. Voici un violon Démonstration du contexte d'empilage tel qu'il est expliqué aquí . @Dansingerman.

19voto

Carlos Precioso Points 514

Donnez à la #under un négatif z-index par exemple -1

Cela se produit parce que le z-index est ignorée dans position: static; qui se trouve être la valeur par défaut ; ainsi, dans le code CSS que vous avez écrit, z-index es 1 pour les deux éléments, quel que soit le niveau que vous avez fixé dans #over .

En donnant #under une valeur négative, il sera derrière toute z-index: 1; élément, c'est-à-dire #over .

0 votes

J'ai eu ce problème aussi - mettre le div 'under' à 0 a fonctionné pour moi.

3voto

Khoa Nguyen Points 254

Lorsque des éléments sont positionnés en dehors du flux normal, ils peuvent chevaucher d'autres éléments.

selon la section Éléments superposés sur http://web.archive.org/web/20130501103219/http://w3schools.com/css/css_positioning.asp

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