Cela n'a rien à voir avec l'assouplissement, c'est que vous faites une transition inutile entre les deux éléments. Il est facile de trop compliquer cela - au lieu de penser aux deux images comme une pile: celle sur le fond peut rester visible tout le temps, seul celui sur le dessus a besoin de fondu avant et arrière.
Comparez ci-dessous:
goodswap = function() {
$('#div2').fadeToggle(); // transitions the top element in and out
}
badswap = function() {
$('#div1, #div2').fadeToggle(); // transitions both elements in and out
}
.block-div {
position: absolute;
height: 200px;
width: 400px;
color: #fff;
font-size: 40px;
text-align: center;
}
.container { position: relative }
#div1 { background-color: red;}
#div2 { background-color: brown; display: none;}
#div3 { background-color: blue }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<button onclick="goodswap()">Good fade</button>
<button onclick="badswap()">Bad fade</button>
<div class="container">
<div class="block-div" id="div3">(This is the page background)</div>
<div class="block-div" id="div1">1</div>
<div class="block-div" id="div2">2</div>
</div>
Si les images sont de tailles différentes, cette technique fonctionne encore tant que la plus grande est empilée avec le z-index supérieur. Pour empêcher le reste de la page de sauter, réglez la taille du conteneur sur celle de l'image la plus grande.
goodswap = function() {
$('#div2').fadeToggle(); // transitions the top element in and out
}
badswap = function() {
$('#div1, #div2').fadeToggle(); // transitions both elements in and out
}
.block-div {
position: absolute;
height: 200px;
width: 400px;
color: #fff;
font-size: 40px;
text-align: center;
}
.container { position: relative }
#div1 { background-color: red;}
#div2 { background-color: brown; width: 500px; display: none;}
#div3 { background-color: blue }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<button onclick="goodswap()">Good fade</button>
<button onclick="badswap()">Bad fade</button>
<div class="container">
<div class="block-div" id="div3">(This is the page background)</div>
<div class="block-div" id="div1">1</div>
<div class="block-div" id="div2">2</div>
</div>
questions visant à obtenir l'aide de débogage ("** pourquoi est-ce pas le code de travail? **") doivent inclure le comportement souhaité, un problème spécifique * ou erreur * et * le code le plus court nécessaire * de le reproduire ** dans la question elle-même **. Les questions sans ** un énoncé de problème clair ** ne sont pas utiles aux autres lecteurs. Voir: [Comment créer un exemple minimal, complet et vérifiable] (https://stackoverflow.com/help/mcve). – Andreas
Pouvez-vous envelopper le contenu dans un div ou span et la transition que l'ensemble de la div? –
Je pourrais utiliser des fonds différents dans le futur. C'était juste un exemple minimal.Voici un avec différents milieux: https://jsfiddle.net/j2td4hd7/15/. Pourquoi l'arrière-plan de la page s'affiche-t-il pendant la transition? Merci – Adam