Подтвердить что ты не робот

Проблема с IE-индексом IE 6 и IE 7

http://madisonlane.businesscatalyst.com

Я пытаюсь получить знак-знак div #, чтобы сидеть над дном div #. Это отлично работает во всех браузерах, кроме IE6 и IE7. Кто-нибудь может понять, в чем проблема?

Кроме того, IE6 отображает еще 198px в верхней части нижней части div #.

4b9b3361

Ответ 1

Согласиться с комментарием валидатора - валидация обычно помогает. Но, если это не имеет несколько указателей на z-индекс в IE:

1) элементы, которые z-index, которыми вы управляете, должны находиться на одном уровне, т.е. вы должны установить z-индекС#bottom и #body

если это невозможно, то

2) IE иногда не применяет z-index правильно, если только элементы ou не применяют его к position:relative. Попробуйте применить это свойство к #bottom и #body (или #signpost)

сообщите мне, как это работает

Дарко

Ответ 2

Большинство ответов здесь неверны; некоторые работы, но не по той причине, что они заявляют. Вот несколько объяснений.

Так z-index должен работать в соответствии с спецификацией:

  • вы можете присвоить значение z-index любому элементу; если вы этого не сделаете, по умолчанию будет auto
  • Позиционированные элементы (то есть элементы с атрибутом position, отличные от значения по умолчанию static) с z-index, отличным от auto, создают новый контекст стекирования. Контексты стеков - это "единицы" перекрытия; один стековый контекст либо полностью над другим (то есть каждый элемент первого над любым элементом второго) или полностью под ним.
  • внутри одного и того же контекста стекирования сравнивается уровень стека элементов. Элементы с явным значением z-index имеют это значение как уровень стека, другие элементы наследуются от своих родителей. Элемент с более высоким уровнем стека отображается сверху. Когда два элемента имеют одинаковый уровень стека, обычно тот, который позже в дереве DOM, нарисован сверху. (Более сложные правила применяются, если они имеют другой атрибут position.)

Другими словами, когда два элемента имеют z-index set, чтобы решить, что будет отображаться сверху, вам нужно проверить, есть ли у них какие-либо позиционированные родители, у которых также есть z-index. Если они этого не делают, или родители являются общими, выигрывает тот, у кого больше выигрыш z-index. Если это так, вам нужно сравнить родителей, а z-index детей не имеет значения.

Итак, z-index решает, как элемент помещается по сравнению с другими дочерними элементами его "родителя стекирования" (ближайшего предка с набором z-index и position от relative, absolute или fixed), но это не имеет значения при сравнении с другими элементами; это родительский стек z-index (или, возможно, z-index родительской стекирования родительского стека, и т.д.), который учитывается. В типичном документе, в котором вы используете z-index только для нескольких элементов, таких как раскрывающиеся меню и всплывающие окна, ни один из которых не содержит другого, родитель стека всех элементов с z-index - это весь документ, и вы можете обычно избегайте думать о z-index как глобальном упорядочении на уровне документа.

Основное отличие от IE6/7 состоит в том, что позиционированные элементы запускают новые контексты стекирования, независимо от того, установлены ли они z-index или нет. Поскольку элементы, которые вы инстинктивно присваивали значениям z-index, как правило, абсолютно позиционированы и имеют относительно позиционированный родительский или близкий предок, это будет означать, что ваши элементы z-index не будут сравниваться вообще, вместо этого их позиционированные предки будет - и поскольку у них нет набора z-индексов, порядок документов будет преобладать.

В качестве обходного пути вам нужно выяснить, какие предки фактически сравниваются, и назначить им некоторый z-индекс, чтобы восстановить желаемый порядок (который обычно будет иметь порядок обратного документа). Обычно это выполняется с помощью javascript - для выпадающего меню вы можете проходить через контейнеры меню или элементы родительского меню и назначать им z-index из 1000, 999, 998 и т.д. Другой метод: когда всплывающее или выпадающее меню становится видимым, найдите всех его относительно позиционированных предков и дайте им класс on-top, который имеет очень высокий z-индекс; когда он снова станет невидимым, удалите классы.

Ответ 3

У меня просто была эта проблема, и найденное мной исправление (благодаря Quirksmode) заключалось в том, чтобы предоставить прямой родительский элемент node, который вы пытаетесь установить z-индекс собственного z-индекса, который меньше, чем z-index node, который вы пытаетесь установить. Вот краткий пример, который должен работать в IE6

<html>
  <head>
    <style type="text/css">
      #AlwaysOnTop {
        background-color: red;
        color: white;
        width: 300px;
        position: fixed;
        top: 0;
        z-index: 2;
      }
      #Header {
        color: white;
        width: 100%;
        text-align: center;
        z-index: 1;
      }
    </style>
  </head>
  <body>
    <div id="Header">
      <div id="AlwaysOnTop">This will always be on top</div>
    </div>
    <div id="Content">Some long amount of text to produce a scroll bar</div>
  </body>
</html>

Ответ 4

Добро пожаловать, я решил проблему с помощью:

.header { 
    position: relative;
    z-index: 1001;
}
.content {
    position: relative;
    z-index: 1000;
}

Ответ 5

Похоже на то, что у вас есть некорректный HTML-код. Я пробовал подсчет, и, возможно, я потерял счет открытия и закрытия тегов, но похоже, что контейнер div # не закрыт. Попробуйте запустить страницу через валидатор (например, W3C HTML Validator или что-то еще) и исправление некоторых ошибок. Это помогло мне с такими проблемами в прошлом. Удачи!

Ответ 6

У меня недавно возникла проблема с отображением одного слоя над другим. В моем случае я программно создавал два слоя в Javascript, один для диаплеирования настраиваемого элемента управления и один для создания полного экрана за ним. FF был в порядке, bu IE отображал весь экранный слой всегда поверх всего остального.

После многочисленных тралений через interweb, пробовав все предложения, единственным способом, с помощью которого я в конечном итоге его работаю, было удалить атрибуты position: из обоих слоев и настроить атрибут margin-top:, пока я не получу удовлетворительный результат.

Немного хэша, но он работает, и все будет хорошо, пока IE 8 не выберет все текущие ошибки......

Ответ 7

единственное надежное решение состоит в том, чтобы поместить верхние элементы ниже в код, а затем надавить их на на другой материал с абсолютным позиционированием.

например. Wordpress: поместите навигацию в файл нижнего колонтитула, но все еще внутри обертки страницы.

может также принести некоторые преимущества для поисковых систем, потому что они могут непосредственно начинать с содержимого, не просканировав сначала через меню...

UPDATE: Мне нужно исправить себя. При размещении элемента ниже, а затем нажатии его все еще самый простой способ, есть определенные случаи, когда это невозможно в разумные сроки. Затем вы должны убедиться, что каждый родительский элемент имеет какое-то позиционирование и некоторый смысл z-index. Затем z-index должен снова работать даже в IE7.