J'essaie d'implémenter un menu de navigation déroulant horizontal à plusieurs niveaux. Immédiatement en dessous (verticalement) du menu, j'ai une vidéo YouTube intégrée via iframe. Si je survole l'un des éléments de navigation de niveau principal dans Firefox, le menu déroulant apparaît correctement en haut de la vidéo.
Dans Chrome et IE9, cependant, seule une partie de la liste déroulante est visible dans la petite région d'espace que j'ai entre le menu et l'iframe. Le reste semble être derrière l'iframe.
Le problème semble être lié à la vidéo YouTube, pas à l'iframe. Pour tester, j'ai dirigé l'iframe sur un autre site Web plutôt que sur la vidéo, et le menu déroulant a bien fonctionné, même dans IE.
- Question 1: WTF?
- Question 2: Pourquoi, même si je mets explicitement un
z-index:-999 !important;
sur l'iframe, ce problème se produit-il toujours?
Y a-t-il un CSS interne inclus dans le code d'intégration YouTube qui remplace en quelque sorte les choses?
<embed wmode="transparent" ...>
section est tout ce dont vous avez besoin (au moins dans Firefox) et pas besoin de vous soucier de la configuration de wmode dansurl
'sparam
' s ouiframe
sRéponses:
Essayez d'ajouter wmode, il semble avoir deux paramètres.
Je ne trouve pas de raison technique pour laquelle cela fonctionne, ni beaucoup plus d'explications, mais jetez un œil à cette requête .
ou ca
la source
wmode
fonctionne également bien qu'il ne soit pas documenté.La réponse de Joshc était sur la bonne voie, mais j'ai trouvé que cela supprime totalement la
?rel=0
chaîne de requête et la remplace par l'?wmode=transparent
élément - ce qui a pour effet d'afficher la liste des vidéos suggérées par YouTube à la fin de la lecture, même si vous ne l'avez pas fait à l'origine. Je ne veux pas que cela se produise.J'ai changé le code pour que l'
src
attribut de la vidéo intégrée soit analysé en premier, pour voir s'il y a déjà un point d'interrogation?
(car cela dénote la présence d'une chaîne de requête préexistante, qui pourrait être quelque chose comme?rel=0
mais pourrait en théorie être tout ce que YouTube choisira d'ajouter à l'avenir). S'il y a déjà une chaîne de requête, nous voulons la préserver, pas la détruire, car elle représente un paramètre choisi par quiconque a collé dans cette vidéo YouTube, et ils l'ont probablement choisi pour une raison!Donc, s'il
?
est trouvé, lewmode=transparent
sera ajouté en utilisant le format:&mode=transparent
pour le marquer simplement à la fin de la chaîne de requête préexistante.Si aucun
?
n'est trouvé, alors le code fonctionnera exactement de la même manière qu'à l'origine (dans l' article de toomanyairmiles ), en ajoutant simplement?wmode=transparent
une nouvelle chaîne de requête à l'URL.Maintenant, indépendamment de ce qui peut ou non se trouver à la fin de l'URL YouTube en tant que chaîne de requête, elle est préservée et les
wmode
paramètres requis sont injectés ou ajoutés sans endommager ce qui existait auparavant.Voici le code à insérer dans votre
document.ready
fonction:la source
opaque
pasOpaque
(notez le cas)Ajoutez simplement l'un de ces deux à l'url src:
la source
J'ai le même problème sur YouTube iframe ne s'intègre que dans Internet Explorer.
L'index Z était totalement ignoré, ou la vidéo flash apparaissait simplement au plus haut indice possible.
C'est ce que j'ai utilisé, en adaptant légèrement le script jquery ci-dessus.
Mon code d'intégration, directement depuis YouTube ...
Le jQuery légèrement adapté de la réponse ci-dessus ...
Fondamentalement, si vous ne sélectionnez pas Afficher les vidéos suggérées lorsque la vidéo se termine dans vos paramètres d'intégration, vous avez un
?rel=0
à la fin de votre"src"
URL. J'ai donc ajouté le bit de remplacement au cas où il?rel=0
existe. Sinon,?wmode=transparent
cela ne fonctionnera pas.la source
Nous pouvons simplement ajouter
?wmode=transparent
à la fin de l'URL YouTube. Cela indiquera à YouTube d'inclure la vidéo avec l'ensemble wmode. Ainsi, votre nouveau code d'intégration ressemblera à ceci: -la source
Seul celui-ci a fonctionné pour moi:
Je le charge dans le fichier Wordpress footer.php. Code trouvé dans le commentaire ici (merci Gerson)
la source
wmode = opaque ou transparent au début de ma chaîne de requête n'a rien résolu. Ce problème pour moi ne se produit que sur Chrome, et même pas sur tous les ordinateurs. Juste un processeur. Cela se produit également dans les intégrations vimeo, et peut-être dans d'autres.
Ma solution consiste à attacher à l'événement `` montré '' et `` masqué '' des modaux d'amorçage que j'utilise, à ajouter une classe qui définit l'iframe à 1x1 pixels et à supprimer la classe lorsque le modal se ferme. On dirait que cela fonctionne et est simple à mettre en œuvre.
la source
Les réponses ci-dessous n'ont pas vraiment fonctionné pour moi, j'ai eu un événement de clic sur le wrapper et c'est-à-dire 7,8,9,10 ignoré le z-index, donc mon correctif donnait à l'emballage une couleur d'arrière-plan et tout a tout d'un coup fonctionné . Bien qu'il soit supposé être transparent, j'ai donc défini le wrapper avec la couleur d'arrière-plan blanc, puis l'opacité 0,01, et maintenant cela fonctionne. J'ai aussi les fonctions ci-dessus, donc ça pourrait être une combinaison.
Je ne sais pas pourquoi ça marche, je suis juste content que ça marche.
la source
Le code Javascript de BigJacko a fonctionné pour moi, mais dans mon cas, j'ai d'abord dû ajouter du code JQuery «noconflict». Voici la version révisée qui a fonctionné sur mon site:
la source
Tout ce dont vous avez besoin sur l'iframe est:
et dans l'URL:
la source