z-индекс не работает в Internet Explorer с pdf в iframe
Я не могу сделать z-index
работы на iframe
который содержит pdf-файл с IE8. Он работает с Google Chrome.
пример (JSFiddle):
HTML
<div id="div-text">
<div id="shouldBeOnTop">my text that should be on top</div>
</div>
<div id="div-frame">
<iframe src="http://legallo1.free.fr/french/CV_JLG.pdf" width="200" height="200"/>
</div>
CSS
#div-text{
position:relative;
left:210px;
top:20px
}
#shouldBeOnTop{
position:relative;
right:60px;
background-color:red;
width:100px;
z-index:2;
}
#div-frame{
position:relative;
z-index:1;
}
3 ответов:
обновление:у Мэтью Уайза есть действительно умное альтернативное решение что вы должны учитывать-особенно если у вас возникли проблемы с моим подходом или не нравится уродливые хаки!
есть способ покрыть оконные элементы в IE с другими элементами, но вам это не понравится.
фон: оконные и безоконные элементы
Legacy IE классифицирует элементы на два типа: оконные и без окон.
обычные элементы, такие как
div
иinput
are безоконный. Они отображаются самим браузером в одной плоскости MSHTML и уважают z-порядок друг друга.элементы, отображаемые вне MSHTML являются в окне, например,
select
(визуализируется ОС) и элементы управления ActiveX. Они уважают z-порядок друг друга, но занимают отдельную плоскость MSHTML, которая нарисована поверх всех окон элементы.единственное исключение
iframe
. В IE 5,iframe
был оконный элемент. Это было изменено в IE 5.5; теперь это элемент без окон, но по причинам обратной совместимости он все равно будет рисовать поверх оконных элементов с более низким Z-индексомдругими словами:
iframe
уважает z-индекс для оконных и безоконных элементов. Если вы ставитеiframe
над оконным элементом, любые элементы без окон, расположенные поверх элементiframe
будет видна!что это значит
PDF всегда будет отображаться поверх обычного содержимого страницы -как
select
элементы были до IE 7. Исправление заключается в том, чтобы расположить другойiframe
между вашим контентом и PDF.демо
jsFiddle: http://jsfiddle.net/Jordan/gDuCE/
код
HTML:
<div id="outer"> <div id="inner">my text that should be on top</div> <iframe class="cover" src="about:blank"></iframe> </div> <iframe id="pdf" src="http://legallo1.free.fr/french/CV_JLG.pdf" width="200" height="200"></iframe>
CSS:
#outer { position: relative; left: 150px; top: 20px; width: 100px; z-index: 2; } #inner { background: red; } .cover { border: none; position: absolute; top: 0; left: 0; height: 100%; width: 100%; z-index: -1; } #pdf { position: relative; z-index: 1; }
поддержка
это было проверено и должно работать в IE 7-9. Если вы чувствуете, что он появляется в DOM для других браузеров, вы можете добавить его с помощью JavaScript или обернуть его в условный комментарий IE:
<!--[if IE]><iframe class="cover" src="about:blank"></iframe><![endif]-->
Я пытался исправить ту же проблему, и мой сценарий был похож. Я пытался сделать видео youtube на своей странице, и поверх видео я хотел разместить некоторые
div
С некоторой информацией.но видео youtube содержится в
iframe
не позволял мне этого делать. Независимо отz-index
что я дал элементами.тогда этот пост помог - https://stackoverflow.com/a/9074366/1484384
в основном его об
wmode
. Проверьте выше сообщение, чтобы увидеть, как работать с ним.вот код из этого поста:
<iframe title="YouTube video player" width="480" height="390 src="http://www.youtube.com/embed/lzQgAR_J1PI?wmode=transparent">
или
/ / Fix z-index YouTube Video embedding
$(document).ready(function (){ $('iframe').each(function(){ var url = $(this).attr("src"); $(this).attr("src",url+"?wmode=transparent"); }); });
обходной путь с дополнительным IFRAME действительно работает в простых случаях, но я потратил утро, пытаясь заставить наложение уважать прозрачность. В основном наше приложение имеет модальные всплывающие окна, в которых полнооконный оверлей за всплывающими окнами отображается "серым" (цвет фона черный, непрозрачность 0,25), чтобы указать пользователю, что всплывающие окна являются модальными. С обходным путем встроенный PDF-вид никогда не становится серым с остальной частью окна, поэтому он все еще выглядит "активным", и действительно Вы может по-прежнему взаимодействовать с PDF viewer.
наше решение-использовать pdf-файл Mozilla.библиотека js:https://github.com/mozilla/pdf.js/ - встраивание IFRAME, указывающего на тестовый URL http://mozilla.github.com/pdf.js/web/viewer.html?file=compressed.tracemonkey-pldi-09.pdf работает прямо из коробки, уважая z-индекс, прозрачность, лот, никаких хаков не требуется! Кажется, что они используют свой собственный движок рендеринга, который генерирует стандартный HTML, представляющий содержание PDF-файла.
Comments