Как обойти проблемы IE с z-индексом, чтобы поместить модальный * поверх * панели YUI

#javascript #html #css #internet-explorer #yui

#javascript #HTML #css #internet-explorer #yui

Вопрос:

В моем веб-приложении есть информационное всплывающее окно modal, которое по сути является просто a <div> с его атрибутом CSS « display «, установленным на « none «. Фрагмент JavaScript переключает этот атрибут отображения, когда модал должен появиться.

В большинстве мест, где этот модал может быть активирован, он работает просто отлично. Однако на сайте есть одна страница, где какой-то старый код YUI выводит модал в виде объекта « YAHOO.widget.Panel «. Когда кто-то запускает информационное событие внутри этого модала YUI, мне нужно, чтобы мой информационный модал по-прежнему отображался поверх модала YUI.

Это отлично работает во всех браузерах, кроме IE. Однако в IE информационный модал полностью скрыт, потому что он отображается за YUI.

Есть ряд вопросов по StackOverflow, связанных с « z-index » проблемами CSS в IE, но большинство из них, похоже, связаны с проблемами макета при начальной загрузке страницы. Проблема, с которой я сталкиваюсь, заключается в том, что панель YUI создается «на лету» после загрузки страницы.

Не имеет значения, насколько высокий я установил z-индекс для своего информационного модала (и насколько низкий я говорю YUI установить z-индекс для своего модала)… IE всегда присваивает панели YUI более высокий z-индекс, потому что он был создан позже.

Есть ли какой-либо чистый обходной путь для подобной ситуации… где вам нужно, чтобы IE присваивал более высокий z-индекс <div> , созданному во время загрузки страницы, чем тому, который был создан JavaScript после загрузки страницы?

Ответ №1:

Для того, чтобы расположение панели на странице имело значение, панель YUI, вероятно, добавляется к телу. При вызове .render() метода панели YUI укажите, что родительский div должен совпадать с родительским div вашего всплывающего окна,

 yuipopup.render('infodivparent');
  

это обеспечит правильную работу z-индексов.

т.е. изменить это,

 <body>
<div id="yui_panel" style="z-index: 2;"></div>
<div id="content" style="z-index: 1;">
    <div id="mypopup" style="z-index: 100"></div>
</div>
</body>
  

к этому,

 <body>
<div id="content" style="z-index: 1;">
    <div id="mypopup" style="z-index: 100"></div>
    <div id="yui_panel" style="z-index: 2;"></div>
</div>
</body>
  

Я также должен отметить, что время никогда не является фактором того, как DOM обрабатывает узлы. Когда он был добавлен, ничего не значит, только где он был добавлен.