iframeを介して埋め込まれたYouTubeビデオz-indexを無視しますか?


130

水平マルチレベルドロップダウンナビゲーションメニューを実装しようとしています。メニューのすぐ下(垂直方向)に、iframeを介して埋め込まれたYouTubeビデオがあります。Firefoxのメインレベルのナビゲーション項目の1つにカーソルを合わせると、ドロップダウンメニューがビデオの上に正しく表示さます。

ただし、ChromeとIE9では、メニューとiframeの間にある小さなスペース領域に、ドロップダウンの一部しか表示されません。残りはiframeの背後にあるようです。

問題はiframe ではなく、YouTubeビデオに関連しているようです。テストするために、iframeをビデオではなく別のWebサイトに向け、ドロップダウンメニューはIEでも正常に機能しました。

  • 質問1:WTF?
  • 質問2:z-index:-999 !important; iframe に明示的にを配置しても、この問題が引き続き発生するのはなぜですか?

YouTubeの埋め込みコードに含まれている内部CSSはありますか?


リンクを投稿できますか-コードなしで役立つ応答を返すのは困難です。
toomanyairmiles 2012年



2015年にはどのようにこの作品を疑問に思う人のために、<embed wmode="transparent" ...>セクションでは、あなたが必要とするすべてであるとのwmodeの設定について心配する必要はありません(Firefoxで少なくとも)urlさんparamのかiframe
RozzA

何らかの理由でyoutube.com/v/video_idyoutube.com/embed/video_idの 2種類のYouTubeリンクがあることに注意してください。IEでは、v-linkはz-indexを無視しますが、埋め込みは正常に機能します。
アントンLyhin

回答:


243

wmodeを追加してみてください。2つのパラメーターがあるようです。

&wmode=Opaque

&wmode=transparent

私はそれが機能する技術的な理由、またはより多くの説明を見つけることができませんが、このクエリを見てください

<iframe title="YouTube video player" width="480" height="390" src="http://www.youtube.com/embed/lzQgAR_J1PI?wmode=transparent" frameborder="0" wmode="Opaque">

またはこれ

//Fix z-index youtube video embedding
$(document).ready(function (){
    $('iframe').each(function(){
        var url = $(this).attr("src");
        $(this).attr("src",url+"?wmode=transparent");
    });
});

6
(私はOPです)みんなありがとう!manisheriar.com/blog/flash_objects_and_z_indexで同様の解決策を見つけました 。キーは、<param> name = "wmode" value = "transparent" <embed>でwmode = "transparent"の両方を使用しているようです。私が疑ったように、それはiframeの問題ではありません。Flashを強制的に透明にしない限り、Flashが最高のZ-indexを必要とする(必要ですか?)問題があるようです。
user249493 2012年

5
wmodeドキュメントに記載されていませんが、iframe JS APIを使用している場合、playerVar も機能します。
リチャードM

1
私はこれを統合しましたが、私のfancyboxスティルはie7 / 8で機能しません。containcu.com.au/homeiswheretheheartis 何ができるか
Dan

6
?wmode = transparentオプションは、私にとって魅力のように機能しました。質問する適切な質問をすばやく見つけられればいいのにと思います。探し始めてから24時間後、この答えが見つかりました。上記のクエリにも回答して投稿していただきありがとうございます。
djmarquette 2013年

1
@ダン、私の編集を参照... YouTubeの埋め込みコードにクエリ文字列が既に含まれている可能性があります。(?rel = 0のように、関連する動画を表示しません)。その場合は、&wmode = transparentを使用してください(または不透明-システムリソースの使用量が少ないと聞いたので、透明にする理由がない限り、主に使用します)。
Sean Kendle 2013

28

Joshcの答えは正しい方向にありましたが、?rel=0クエリ文字列を完全に削除して、?wmode=transparent項目で元々はそうではありませんでしたが、再生の最後にYouTubeおすすめ動画リストが表示されます。これを実現させたい。

ように私は、コードを変更しsrc、埋め込みビデオの属性は、疑問符があるかどうかを確認するために、最初にスキャンされ?、これは、既存のクエリ文字列の存在、意味するので(すでにそこにありますようなものになる?rel=0が、理論的には可能性をYouTubeが将来追加することを選択したものである必要があります)。クエリ文字列がすでにある場合は、破棄しないで保持します。これは、このYouTube動画に貼り付けた人が選択した設定を表しており、おそらく理由のために選択したためです。

したがって、?が見つかった場合、は次wmode=transparentの形式を使用して追加され&mode=transparentます。既存のクエリ文字列の末尾にタグを付けるだけです。

?見つからない場合、コードは最初に実行されたのとまったく同じように動作し(toomanyairmilesの投稿)、?wmode=transparentURLに新しいクエリ文字列として追加されます。

これで、クエリ文字列としてYouTube URLの最後にあるものとないものに関係なく、それが保持され、必要なwmodeパラメータが挿入されたり、追加されたりして、以前の状態が損なわれることはありません。

document.ready関数にドロップするコードは次のとおりです。

$('iframe').each(function() {
  var url = $(this).attr("src");
  if (url.indexOf("?") > 0) {
    $(this).attr({
      "src" : url + "&wmode=transparent",
      "wmode" : "opaque"
    });
  }
  else {
    $(this).attr({
      "src" : url + "?wmode=transparent",
      "wmode" : "opaque"
    });
  }
});

これは私にとってはうまくいきましたが、受け入れられた答えはうまくいきませんでした(コードを修正した後でも)。ドロップイン修正をありがとう。
トム

?パラメータクエリ文字列を開始します。&は区切り文字です。基本的なもの。stackoverflow.com/questions/2667551/…を
cdonner 2013

2
これで、あきらめる10秒前に問題が解決しました。
マリブール

1
パーフェクト!ずっと探していました!
Jeroen W

2
そうでopaqueはありませんOpaque(ケースに注意してください)
Szymon Toda

6

これら2つのうちの1つをsrc urlに追加するだけです。

&wmode=Opaque

&wmode=transparent

<iframe id="videoIframe" width="500" height="281" src="http://www.youtube.com/embed/xxxxxx?rel=0&wmode=transparent" frameborder="0" allowfullscreen></iframe>

5

ただし、Internet ExplorerでのみYouTube iframe埋め込みに同じ問題があります。

Z-indexは完全に無視されていたか、フラッシュビデオが可能な限り高いインデックスで表示されていました。

これは私が使用したもので、上記のjqueryスクリプトをわずかに変更しました。

私の埋め込みコード、YouTubeから直接...

<iframe width="560" height="315" src="http://www.youtube.com/embed/QldZiR9eQ_0?rel=0" frameborder="0" allowfullscreen></iframe>


上記の答えから少し変更されたjQuery ...

$('iframe').each( function() {
    var url = $(this).attr("src")
    $(this).attr({
        "src" : url.replace('?rel=0', '')+"?wmode=transparent",
        "wmode" : "Opaque"
    })
});


基本的に、埋め込み設定で動画が終了したときに [ おすすめの動画を表示する]を選択しない場合、 URLの?rel=0末尾にがあります"src"。そこで、?rel=0存在する場合に備えて置換ビットを追加しました。それ以外の場合?wmode=transparentは機能しません。



2

?wmode=transparentYouTube URLの最後に追加するだけです。これにより、wmodeが設定された動画を含めるようにYouTubeに指示します。新しい埋め込みコードは次のようになります:-

<iframe width="420" height="315" src="http://www.youtube.com/embed/C4I84Gy-cPI?wmode=transparent" frameborder="0" allowfullscreen>

これは、多くの回答ですでに提案されており、さらに別の回答で繰り返す必要はありません。新しい何かを追加する場合は、実行してください。そうでない場合は、他の人がすでに投稿した内容を繰り返すだけではいけません。
シャドウウィザードはあなたのための耳です

2

これだけが私のために働きました:

<script type="text/javascript">
var frames = document.getElementsByTagName("iframe");
    for (var i = 0; i < frames.length; i++) {
        src = frames[i].src;
        if (src.indexOf('embed') != -1) {
        if (src.indexOf('?') != -1) {
            frames[i].src += "&wmode=transparent";
        } else {
            frames[i].src += "?wmode=transparent";
        }
    }
}
</script>

私はそれをfooter.php Wordpressファイルにロードします。ここでコメントにコードが見つかりました (Gersonに感謝)


1

クエリ文字列の先頭のwmode = opaqueまたはtransparentは何も解決しませんでした。私にとってこの問題はChromeでのみ発生し、すべてのコンピューターで発生するわけではありません。1つのCPUのみ。vimeoの埋め込みでも発生しますが、他の埋め込みでも発生する可能性があります。

私が使用しているブートストラップモーダルの「表示」および「非表示」イベントにアタッチし、iframeを1x1ピクセルに設定するクラスを追加し、モーダルが閉じるときにクラスを削除するための私の解決策。動作しているようで、実装も簡単です。


1

回答の弓は実際には機能しませんでした。ラッパーでクリックイベントがあり、7、8、9、10はz-indexを無視していたため、私の修正はラッパーに背景色を与えていたので、突然動作しました。また、透明であると想定されていたので、ラッパーをbackground-color白で定義し、次に不透明度0.01で定義すると、動作します。上記の機能も兼ね備えているので、組み合わせも可能です。

なぜ機能するのかわかりませんが、本当に満足しています。


1

BigJackoのJavascriptコードは私にとってはうまくいきましたが、私の場合、最初にJQueryの「競合しない」コードを追加する必要がありました。これが私のサイトで機能した改訂版です。

<script type="text/javascript">
var $j = jQuery.noConflict(); 
jQuery(document).ready(function($j){
  $j('iframe').each(function() {
    var url = $j(this).attr("src");
      if ($j(this).attr("src").indexOf("?") > 0) {
        $j(this).attr({
          "src" : url + "&wmode=transparent",
          "wmode" : "Opaque"
        });
      }
      else {
        $j(this).attr({
          "src" : url + "?wmode=transparent",
           "wmode" : "Opaque"
        });
      }
   });
});
</script>

1

iframeに必要なものは次のとおりです。

...wmode="opaque"></iframe>

そしてURLで:

http://www.youtube.com/embed/123?wmode=transparent
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.