JQuery fadeIn в позиции: абсолютные причины z-index issue

Технически я использую fadeToggle(), но они кузены... в основном моя проблема в том, что у меня есть абсолютно позиционированный div, который я использую slideToggle(), но Z-индекс не устанавливается до анимации завершается. Результатом является то, что во время затухания текст в соседнем div (который имеет более низкое значение z-индекса, чем одно затухание) появляется "поверх" затухания в div с более высоким z-индексом.

Кто-нибудь знаком с этой причудой? Знаете ли вы об обходах?

РЕДАКТИРОВАТЬ. Позвольте мне уточнить: когда анимация ЗАВЕРШЕНО, z-index разрешается правильно, но во время перехода текст находится поверх нее.

Ответы

Ответ 1

У меня была такая же проблема, поэтому я решил поделиться этим решением. Как вы сказали, jQuery делает что-то с fadeIn(), fadeOut(), slideToggle() и т.д., Когда элементы абсолютно позиционируются с помощью z-index, а элементы под ним также позиционируются как абсолютные и заданы z-index.

Если вы удалите нижние элементы, вы заметите, что ваша анимация работает нормально. Но с "подэлементами" вы получаете только ваш fadeIn, когда он полностью исчезает. Это потому, что z-index подтверждается только после завершения анимации.

Решение состоит в том, чтобы создать контейнер вокруг каждого элемента, который вы затухаете. Вы также можете создать контейнер вокруг всех элементов, но имейте в виду, что у вас не будет эффектов зависания или щелчка для подэлементов, контейнер div существует.

Итак, в моем примере я просто использую один div, который вы пытаетесь затухать. Так что скажем, у вас есть функция "увеличения", которая зарывается во время анимации:

<div id="zoomin"></div>

#zoomin {
  position:absolute; top:20px; right:20px; 
  display:block; z-index:15;
  width:47px; height:48px;
}

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

<!-- this is your container -->
<div id="zoomincontainer" class="keepontop">

  <!-- this is your div --> 
  <div id="zoomin"></div>

<!-- end container -->
</div>

#zoomincontainer {
  top:20px; right:20px;      
  with:47px; height:48px;
}

div.keepontop {
  position:absolute; z-index:14;
}

Это применит фундамент для вашего div и сохранит его поверх других слоев во время анимации.

Обратите внимание, что, поскольку ваш "zoomin" div установлен абсолютно, вам необходимо применить характеристики ширины, высоты и положения к вашему div "контейнеру" zoomincontainer ". В противном случае вы найдете свой контейнер div в верхнем левом углу страницы/фрейма с размерами 0px x 0px - это не будет основой для чего-либо, если только он не охватывает всю область под анимациями, которые вы анимации.

Я поместил PA и z-index в класс keepontop, если у вас было несколько div, которые вы затухали.

Теперь работает как шарм. Надеюсь, это поможет!

Ответ 2

Еще одно замечание... У меня была одна и та же проблема, и я решил:

<div class='keepontop'>
 <div class='overlay'>
  <div></div>
  <div></div>
  <div></div>
  <div></div>
 </div>
</div>

<script>
$('.overlay).fadeIn(500); 
$('.keepontop').css('position', 'relative'); 
</script>

.keepontop{
position:absolute;
z-index:999;
}

Это позволило мне иметь один containg div, который исправляет проблему z-index, но также решил проблему с событием click для похоронных DIV.

Ответ 3

У меня такая же проблема, и я пробовал все эти решения, и это не решило мою проблему...

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

<div class="concept">
    <div class="title">...</div>
</div>

<div class="content4>...</div>

<script>
    $('.concept .title').css('z-index', 0);

    $('.content4').fadeIn(600,function(){
       $('.concept .title').css('z-index', 1);
    });
</script>

// CSS

.concept { position: absolute; } 
.concept .title { position: absolute; z-index: 1; }

.content4 { position: absolute; z-index: 1000; }

Ответ 4

Slidetoggle действительно причудливый... У меня была аналогичная проблема. То, как я получил его для работы на моем веб-сайте, было просто переместить перегруженный div в самую нижнюю часть моего html. Поскольку он последний раз в DOM, индекс z должен автоматически устанавливаться выше, чем предыдущие элементы. Поскольку он абсолютно позиционирован, у вас также не должно быть проблем с макетом.

Ответ 5

Поместите div вокруг вашего переключающего div. Добавьте стиль с относительным положением и правильным z-индексом. (Может случиться, что z-index 1 недостаточно для вас, затем попробуйте с более высоким уровнем и т.д. 100)

<div style="position: relative; z-index: 1;>
  <div id="component-to-toggle">
    ...
  </div>
</div>

Таким образом, компонент переключения скроется, когда он предположится, но div вокруг никогда не будет, и он никогда не потеряет его z-index.