superponer div opaco sobre el iframe de youtube

110

¿Cómo puedo superponer un div con opacidad semitransparente sobre un video incrustado de iframe de youtube?

<iframe class="youtube-player" type="text/html" width="520" height="330" src="http://www.youtube.com/embed/NWHfY_lvKIQ" frameborder="0"></iframe>
<div id="overlay"></div>

CSS

#overlay {
    position:fixed;
    top:0;
    left:0;
    width:100%;
    height:100%;
    background:#000;
    opacity:0.8;
    /*background:rgba(255,255,255,0.8); or just this*/
    z-index:50;
    color:#fff;
}

editar (se agregó más aclaración): HTML5 se está acercando a nosotros, con más y más dispositivos que lo usan en lugar de flash, lo que complica la incrustación de videos de youtube, afortunadamente, youtube proporciona un iFrame incrustable especial que maneja todos los problemas de compatibilidad de incrustaciones de videos, pero ahora el método de trabajo anterior de superponer un objeto de video con un div semitransparente ya no es válido, ahora no puedo agregar un <param name="wmode" value="transparent">objeto, porque ahora es un iFrame, entonces, ¿cómo agrego un div opaco encima de el video incrustado iframe?

Timo Huovinen
fuente
1
Parece que youtube solucionó el problema por completo.
Timo Huovinen
1
Aún puedo ver el problema en Chrome.
scribu
@scribu podría ser problemas de seguridad flash o me falta algo, lo probé en un servidor local.
Timo Huovinen
Probablemente. De todos modos, la solución de anataliocs funcionó para mí.
scribu
¿Puedes agregar la etiqueta de youtube a esta pregunta?
anataliocs

Respuestas:

210

Información del sitio oficial de Adobe sobre este problema

El problema es cuando insertas un enlace de YouTube:

https://www.youtube.com/embed/kRvL6K8SEgY

en un iFrame, el wmode predeterminado tiene ventana, lo que esencialmente le da un índice z mayor que todo lo demás y se superpondrá sobre cualquier cosa.

Intente agregar este parámetro GET a su URL:

wmode = opaco

al igual que:

https://www.youtube.com/embed/kRvL6K8SEgY?wmode=opaque

Asegúrese de que sea el primer parámetro de la URL. Otros parámetros deben ir después

En la etiqueta iframe:

Ejemplo:

<iframe class="youtube-player" type="text/html" width="520" height="330" src="http://www.youtube.com/embed/NWHfY_lvKIQ?wmode=opaque" frameborder="0"></iframe>
anataliocs
fuente
1
Información de Adobe sobre el problema: http://kb2.adobe.com/cps/155/tn_15523.html . Para que conste.
Wacek
15

Tenga en cuenta que la solución wmode = transparent solo funciona si es la primera vez

http://www.youtube.com/embed/K3j9taoTd0E?wmode=transparent&rel=0

No

http://www.youtube.com/embed/K3j9taoTd0E?rel=0&wmode=transparent
Miguel
fuente
11

Hmm ... ¿qué es diferente esta vez? http://jsfiddle.net/fdsaP/2/

Renders en Chrome bien. ¿Lo necesitas en varios navegadores? Realmente ayuda ser específico.

EDITAR : Youtube muestra el objecty embedsin wmode explícito establecido, lo que significa que por defecto es "ventana", lo que significa que superpone todo . Necesitas:


a) Aloje la página que contiene el objeto / código de inserción usted mismo y agregue el elemento param wmode = "transparente" al objeto y el atributo para insertar si elige servir ambos elementos

b) Encuentra una manera de que YouTube los especifique.


meder omuraliev
fuente
Sí, descubrí cuál era el problema, en Firefox y Chrome funciona con fondos normales, agregar la opacidad lo hace brillar ... el tuyo también brilla.
Timo Huovinen
edité el ejemplo de iframe para que se vea como el mío. jsfiddle.net/fdsaP/6
Timo Huovinen
Entonces ... ¿quieres que la opacidad se aplique al objeto / elemento incrustado dentro del iframe?
meder omuraliev
sí, no noté que el iframe estaba superpuesto porque para mí el objeto está cubriendo el iframe completo, necesito que el video esté cubierto si es posible, de lo contrario, lo reemplazaré con un div negro del mismo ancho / alto y posición.
Timo Huovinen
@meder gracias por el enlace y la solución! lo probaré ahora mismo, pero aún se puede hacer clic en el flash :)
Timo Huovinen
2

Pasé un día jugando con CSS antes de encontrar la sugerencia de anataliocs. Agregue wmode=transparentcomo parámetro a la URL de YouTube:

<iframe title=<your frame title goes here> 
    src="http://www.youtube.com/embed/K3j9taoTd0E?wmode=transparent"  
    scrolling="no" 
    frameborder="0" 
    width="640" 
    height="390" 
    style="border:none;">
</iframe>

Esto permite que el iframe herede el índice z de su contenedor para que su opaco <div>esté frente al iframe.

user605723
fuente
0

¿La superposición opaca tiene fines estéticos?

Si es así, puede utilizar:

#overlay {
        position: fixed;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
        z-index: 50;
        background: #000;
        pointer-events: none;
        opacity: 0.8;
        color: #fff;
}

'pointer-events: none' cambiará el comportamiento de superposición para que pueda ser físicamente opaco. Por supuesto, esto solo funcionará en buenos navegadores.

Chris
fuente
safari 4, chrome y firefox3.6 todavía hace clic en ??
Timo Huovinen
1
¿No es lo que quieres?
Codebeef
Estoy tratando de poner el video incrustado de YouTube detrás de un fondo opaco con fines completamente estéticos :)
Timo Huovinen