How can I overlay a div with semi-transparent opacity over a youtube iframe embedded video?
<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;
}
edit (added more clarification):
HTML5 is approaching us, with more and more devices that use it instead of flash, which complicates the embedding of youtube videos, thankfully youtube provides a special embeddable iFrame with handles all of the video embedding compatibility issues, but now the previously working method of overlaying a video object with a semi-transparent div is no longer valid, I am now unable to add a <param name="wmode" value="transparent">
to the object, because it is now a iFrame, so how do I add a opaque div on top of the iframe embedded video?
Hmm... what's different this time? http://jsfiddle.net/fdsaP/2/Renders in Chrome fine. Do you need it cross-browser? It really helps being specific.
EDIT: Youtube renders the
object
andembed
with no explicit wmode set, meaning it defaults to "window" which means it overlays everything. You need to either:a) Host the page that contains the object/embed code yourself and add wmode="transparent" param element to object and attribute to embed if you choose to serve both elements
b) Find a way for youtube to specify those.
I spent a day messing with CSS before I found anataliocs tip. Add
wmode=transparent
as a parameter to the YouTube URL:This allows the iframe to inherit the z-index of its container so your opaque
<div>
would be in front of the iframe.Information from the Official Adobe site about this issue
The issue is when you embed a youtube link:
in an iFrame, the default wmode is windowed which essentially gives it a z-index greater then everything else and it will overlay over anything.
Try appending this GET parameter to your URL:
wmode=opaque
like so:
Make sure its the first parameter in the URL. Other parameters must go after
In the iframe tag:
Example:
Note that the wmode=transparent fix only works if it's first so
Not
Is the opaque overlay for aesthetic purposes?
If so, you can use:
'pointer-events: none' will change the overlay behavior so that it can be physically opaque. Of course, this will only work in good browsers.