J'ai un DOM qui ressemble à ceci:
#main {
width: 100%;
position: static;
z-index: 2;
overflow: hidden;
}
#content {
width: 100%;
height: 500px;
z-index: 3000; // This doesn't seem to help.
}
#overlayWrapper {
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: 1000; // This needs to be at least 1000 for overlay to cover all elements in the page
position: fixed; // This seems to cause the problem?!
}
#overlay {
opacity: 1;
will-change: opacity;
transition: opacity 225ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: -1;
position: fixed;
background-color: rgba(0, 0, 0, 0.5);
-webkit-tap-highlight-color: transparent;
}
À l'intérieur de la div main , j'ai aussi d'autres choses, qui ne sont pas très pertinentes ici. Maintenant, ces divs ont les classes CSS suivantes.
<body>
<div id="main">
<iframe id="content"></iframe>
</div>
<div id="overlayWrapper">
<div id="overlay"><--THIS IS EMPTY DIV--></div>
</div>
</body>
Maintenant, cela semble fonctionner dans une certaine mesure, car je vois ma superposition avec le background-color code> valeur de rgba (0, 0, 0, 0.5) apparaissant à l'écran.
La partie problématique est que je ne peux pas cliquer sur les éléments qui se trouvent à l'intérieur du iframe .
Ce que j'ai remarqué, c'est que cela se produit à cause du style position: fixed dans le #overlayWrapper .
Si je le supprime, alors je peux cliquer sur le contenu de iframe mais maintenant la superposition n'est plus visible.
Est-il même possible de conserver la superposition d'une manière ou d'une autre mais rendre le truc sur iframe cliquable à nouveau?
J'ai essayé d'ajouter z-index: 3000; à iframe (ie, à # content ), mais cela ne semble pas fonctionner.
Des idées?
3 Réponses :
C'est parce que la propriété z-index de l'élément div # main doit être placée avant le z-index du élément div # overlayWrapper .
J'ai essayé de le définir sur z-index: 5000 , pour #main , cela n'a pas aidé.
Que veux-tu accomplir?
Utilisez position: relative sur l'élément car la propriété z-index entre en action avec son relatif.
#content {
width: 100%;
height: 500px;
/* This doesn't seem to help */
z-index: 3000;
position: relative;
}
Cette solution fonctionne, je ne comprends pas pourquoi cela a été déclassé.
z-index ne fonctionne que sur éléments positionnés a >. Ce qui signifie que le z-index que vous avez appliqué à Voici le fonctionnement jsfiddle . PS: J'ai ajouté des liens dans #content , qui est l'iframe, n'est pas en vigueur. #content {
position: relative;
z-index: 3000;
}
#main pour simuler le contenu que vous pourriez avoir sur votre page.