Наложение непрозрачного div на YouTube iframe - PullRequest
109 голосов
/ 29 сентября 2010

Как я могу наложить div с полупрозрачной непрозрачностью поверх встроенного видео YouTube в iframe?

<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 (добавлено больше уточнений): HTML5 приближается к нам, и все больше и больше устройств используют его вместо флэш-памяти, что усложняет встраивание видео на YouTube. К счастью, YouTube предоставляет специальный встраиваемый iFrame, который решает все проблемы совместимости с встраиванием видео, но теперь это ранее работавший метод наложения видеообъект с полупрозрачным div больше не действителен, теперь я не могу добавить <param name="wmode" value="transparent"> к объекту, потому что теперь это iFrame, так как мне добавить непрозрачный div поверх встроенного видео iframe?

Ответы [ 5 ]

211 голосов
/ 25 января 2011

Информация с официального сайта Adobe об этой проблеме

Проблема заключается в том, что вы вставляете ссылку на YouTube:

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

в iFrame, wmode по умолчаниюэто окно, которое по существу дает ему z-индекс больше, чем все остальное, и он будет перекрывать все что угодно.

Попробуйте добавить этот параметр GET к вашему URL:

wmode = opaque

вот так:

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

Убедитесь, что это первый параметр в URL.Другие параметры должны идти после

В теге iframe:

Пример:

<iframe class="youtube-player" type="text/html" width="520" height="330" src="http://www.youtube.com/embed/NWHfY_lvKIQ?wmode=opaque" frameborder="0"></iframe>
15 голосов
/ 02 марта 2011

Обратите внимание, что исправление wmode = transparent работает только в первом случае

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

Не

http://www.youtube.com/embed/K3j9taoTd0E?rel=0&wmode=transparent
10 голосов
/ 29 сентября 2010

Хм ... а что отличается на этот раз? http://jsfiddle.net/fdsaP/2/

Рендеринг в Chrome отлично. Вам нужен кросс-браузер? Это действительно помогает быть конкретным.

EDIT : Youtube отображает object и embed без явного набора wmode, что означает, что по умолчанию используется «окно», что означает, что оно перекрывает все . Вам нужно либо:


a) Разместите страницу, содержащую код объекта / встраивания, самостоятельно и добавьте элемент paramo wmode = "transparent" к объекту и атрибут для встраивания, если вы решите обслуживать оба элемента

b) Найдите способ указать их для youtube.


2 голосов
/ 07 февраля 2011

Я потратил целый день на CSS, прежде чем нашел совет от anataliocs. Добавьте wmode=transparent в качестве параметра к URL-адресу 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>

Это позволяет iframe наследовать z-индекс своего контейнера, поэтому ваш непрозрачный <div> будет перед iframe.

0 голосов
/ 29 сентября 2010

Является ли непрозрачное наложение для эстетических целей?

Если это так, вы можете использовать:

#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' изменит поведение наложения так, чтобы оно могло бытьнепрозрачныйКонечно, это будет работать только в хороших браузерах.

...