Получение неупорядоченного списка перед слайд-шоу изображений в IE8, IE7 и, вероятно, IE6 - PullRequest
3 голосов
/ 28 января 2010

У меня есть простое (абсолютно позиционированное) слайд-шоу изображений, которое состоит из нескольких изображений, которые вращаются каждые несколько секунд.

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

Это прекрасно работает в Firefox (3.6), Safari (windows) и Chrome (windows). Тем не менее, ссылки, похоже, исчезают за изображениями в IE8 и IE7 (я даже еще не пробовал в IE6 ...).

Как вывести неупорядоченный список на передний план в IE? (см. Код ниже)

Редактировать: Ссылка на рабочую страницу

Редактировать 2: Что я нашел, используя инструменты разработчика IE8, так это то, что ссылки работают и находятся на вершине слайд-шоу, когда я удаляю:

.links a { display: block; }

Результат удаления display: block состоит в том, что у меня есть 5 крошечных областей с возможностью щелчка, перекрывающих изображение в верхнем левом углу. Как только я добавлю его снова, на изображении больше не будет области, где можно щелкнуть мышью, хотя инструменты разработчика показывают квадраты, где ссылки должны быть в правильных местах.

Код (я не включил JavaScript, так как он только оживляет непрозрачность и добавляет / удаляет перечисленные ниже классы):

HTML

<div id="slideshow">
  <ul>
    <li><img src="/images/header01.jpg" alt="some_image" /></li>
    <li><img src="/images/header02.jpg" alt="some_image" /></li>
    <li><img src="/images/header03.jpg" alt="some_image" /></li>
  </ul>
</div>
<ul class="links">
  <li><a href="link1.html">&nbsp;</a></li>
  <li><a href="link2.html">&nbsp;</a></li>
  <li><a href="link3.html">&nbsp;</a></li>
  <li><a href="link4.html">&nbsp;</a></li>
  <li><a href="link5.html">&nbsp;</a></li>
</ul>

CSS

ul.links {
  z-index: 9999;
  position: relative;
}
.links li {
  float: left;
}
.links a {
  display: block;
  width: 192px;
  height: 210px;
}
#slideshow {
  position: absolute;
  left: 0;
  top: 0;
}
#slideshow li {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 8;
  opacity: 0.0;
  border: none;
  /* ie bugs */
  -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
  filter: alpha(opacity=0);
}
#slideshow li.active {
  z-index: 10;
  opacity: 1.0;
}
#slideshow li.last-active {
  z-index: 9;
}

Ответы [ 3 ]

2 голосов
/ 30 января 2010

Ну, вот твоя проблема!

<div id="slideshow">
<ul>
<li><img src="/images/header01.jpg" alt="Habitats Peru - Cusco, Peru" title="Habitats Peru - Cusco, Peru" /></li>
<li><img src="/images/header02.jpg" alt="Habitats Peru - Cusco, Peru" title="Habitats Peru - Cusco, Peru" /></li>
<li><img src="/images/header03.jpg" alt="Habitats Peru - Cusco, Peru" title="Habitats Peru - Cusco, Peru" /></li>
<li><img src="/images/header04.jpg" alt="Habitats Peru - Cusco, Peru" title="Habitats Peru - Cusco, Peru" /></li>
<li><img src="/images/header05.jpg" alt="Habitats Peru - Cusco, Peru" title="Habitats Peru - Cusco, Peru" /></li>
</ul>
</div>

IE Интерпретатор Javascript очень привередлив, и когда вы манипулируете объектом, как сейчас, он обычно вылетает. Это будет один из тех времен. Я думаю, проблема в том, что вы меняете объект, поэтому он считает, что он имеет приоритет.

Лично я бы просто изменил ваш код следующим образом (псевдокод) для архитектуры.

<div>
<ul>
<li><a><img /></a></li>
<li><a><img /></a></li>
</ul>
</div>

Все, что вам нужно сделать - просто установить имя класса / идентификатора для каждого из изображений, чтобы их можно было легко заменить в Javascript (это было бы моим идеальным решением)

Надеюсь, это поможет,

[править]

После более внимательного изучения вашего сайта я обнаружил несколько проблем: CSS:

Line 336:  margin: 0px 0px 18px;;

Это не влияет, но кое-что нужно исправить.

Теперь, некоторые проблемы CSS в IE заключаются в том, что он по какой-то причине не позволяет использовать ссылку на класс .active по какой-то причине.

Если вы хотите увидеть, что я описываю, просто возьмите float: left; от #image_bar .links LI И вы увидите, что все ссылки выровнены по центру, и они идут по отдельным линиям. Так что это указывает на проблему позиционирования в IE.

Теперь, чтобы выяснить, как это исправить. Теперь это исправлено простым добавлением ширины в контейнер #image_bar UL.links Ширина должна быть 962, как ваша максимальная ширина. Это тогда заставит их ссылки выстраиваться правильно, а не в отдельных строках.

Теперь существует проблема с тем, чтобы они появлялись поверх изображения в IE. Я превратил все ссылки в черный, чтобы я мог их видеть, и это заставило их подняться наверх и быть в состоянии щелкнуть мышью. В настоящее время я не уверен, почему они не будут показываться без этого. Но я надеюсь, что это даст вам хорошее начало, и я буду продолжать с этим возиться.

[edit] Добавить "zoom: normal;" на "#image_bar .links A", и это полностью исправит это. [edit] Только что протестировал его, чтобы убедиться, что условный CSS не нужен, он все равно корректно отображается во всех браузерах с этими исправлениями.

[править] Хорошо, поэтому я попробовал описанные выше исправления еще раз, и по какой-то причине они не прошли сейчас. Поэтому я пошел и попробовал другую идею, которая у меня была. Вот и мы.

#image_bar UL.links [Add] width: 962px;
#image_bar .links A [Add] 
background-color: #E8E6D7;
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter: alpha(opacity=0);

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

Я надеюсь, что это сработает для вас, я пробовал это 2 раза, включая перезапуск визуального редактора CSS, чтобы убедиться, что он работает и что он не просто обманывает меня, как в другой раз.

Извините за более длинный ответ, все это было частью мыслительного процесса. Наслаждайтесь!

1 голос
/ 29 января 2010

javascript может перекрывать ваш CSS и придавать изображениям слайд-шоу более высокий z-индекс.

попробуй

#slideshow li {z-index: 8 !important;}

при использовании! Важный переопределяет любое другое правило CSS, указанное в другом месте.

надеюсь, это поможет

1 голос
/ 28 января 2010

Можете ли вы дать #slideshow z-индекс ниже, чем 9999?

...