不透明度淡入和淡出问题 - 仅淡出失败 CSS
Opacity FadeIn and FadeOut Problems - FadeOut Failing CSS Only
我不明白为什么我的淡出效果不适用于我放在一起的叠加层。
我想用 css 来实现其中的大部分。我唯一想使用 jQuery 的时间是切换显示时:延迟后块 class。
我需要做什么才能使叠加层的淡出在短暂延迟后正常工作?
我还包括一个 CodePen。 https://codepen.io/ChidoYo/pen/jOmdZLK
HTML
<div class="container border rounded mt-5">
<div class="row">
<div class="col pb-3">
<h1>Opacity Fade In/Out</h1>
<button class="btn btn-primary" id="toggle">Toggle</button>
</div>
</div>
</div>
<div class="superposer d-none"></div>
<div class="drawer">
<div class="row mx-0 mt-4">
<div class="col">
<h3>Drawer</h3>
</div>
</div>
</div>
CSS
.superposer {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0,0,0,0.52);
opacity: 0;
// transition: opacity 0.2s ease-in-out 2s;
animation: superposerFadeOut 1s ease-in-out 2s;
&.active {
opacity: 1;
// transition: opacity 1s ease-in-out;
animation: superposerFadeIn 0.5s ease-in-out;
}
}
@keyframes superposerFadeOut {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes superposerFadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.drawer {
position: fixed;
top: 0;
bottom: 0;
transition: right 0.25s ease-in-out;
right: -350px;
background-color: white;
border-left: 1px solid #999;
width: 350px;
&.active {
transition: right 0.25s ease-in-out 0.25s;
right: 0;
}
}
jQuery
$(() => {
$('#toggle').on('click', () => {
$('.superposer').toggleClass('active d-none');
$('.drawer').addClass('active');
});
$('.superposer').on('click', () => {
$('.superposer').removeClass('active');
$('.drawer').removeClass('active');
setTimeout(() => {
$('.superposer').addClass('d-none')
}, 1000)
})
})
您的代码存在一些小问题。为什么你的 .superposer
没有淡出的主要原因是你在 display: none
不活跃的时候使用它。 display
不能是 animated/transitioned,因为这两个属性都需要一个可以计算的值范围。 display
具有布尔值。它要么打开,要么关闭。两者之间没有任何区别。
因此只需删除 .superposer
中的 display
行即可使 FadeOut 动画开始工作。但是,这不会是您期望的行为,因为您还需要对 JS 进行一些更改。
我用这些更改做了一个代码笔。您可以在这里查看:https://codepen.io/OSquiddy/pen/ExmrMzX
我也去掉了动画,因为你想要的可以很容易地通过过渡来完成。
我不明白为什么我的淡出效果不适用于我放在一起的叠加层。 我想用 css 来实现其中的大部分。我唯一想使用 jQuery 的时间是切换显示时:延迟后块 class。
我需要做什么才能使叠加层的淡出在短暂延迟后正常工作?
我还包括一个 CodePen。 https://codepen.io/ChidoYo/pen/jOmdZLK
HTML
<div class="container border rounded mt-5">
<div class="row">
<div class="col pb-3">
<h1>Opacity Fade In/Out</h1>
<button class="btn btn-primary" id="toggle">Toggle</button>
</div>
</div>
</div>
<div class="superposer d-none"></div>
<div class="drawer">
<div class="row mx-0 mt-4">
<div class="col">
<h3>Drawer</h3>
</div>
</div>
</div>
CSS
.superposer {
position: fixed;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: rgba(0,0,0,0.52);
opacity: 0;
// transition: opacity 0.2s ease-in-out 2s;
animation: superposerFadeOut 1s ease-in-out 2s;
&.active {
opacity: 1;
// transition: opacity 1s ease-in-out;
animation: superposerFadeIn 0.5s ease-in-out;
}
}
@keyframes superposerFadeOut {
0% {
opacity: 1;
}
100% {
opacity: 0;
}
}
@keyframes superposerFadeIn {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
.drawer {
position: fixed;
top: 0;
bottom: 0;
transition: right 0.25s ease-in-out;
right: -350px;
background-color: white;
border-left: 1px solid #999;
width: 350px;
&.active {
transition: right 0.25s ease-in-out 0.25s;
right: 0;
}
}
jQuery
$(() => {
$('#toggle').on('click', () => {
$('.superposer').toggleClass('active d-none');
$('.drawer').addClass('active');
});
$('.superposer').on('click', () => {
$('.superposer').removeClass('active');
$('.drawer').removeClass('active');
setTimeout(() => {
$('.superposer').addClass('d-none')
}, 1000)
})
})
您的代码存在一些小问题。为什么你的 .superposer
没有淡出的主要原因是你在 display: none
不活跃的时候使用它。 display
不能是 animated/transitioned,因为这两个属性都需要一个可以计算的值范围。 display
具有布尔值。它要么打开,要么关闭。两者之间没有任何区别。
因此只需删除 .superposer
中的 display
行即可使 FadeOut 动画开始工作。但是,这不会是您期望的行为,因为您还需要对 JS 进行一些更改。
我用这些更改做了一个代码笔。您可以在这里查看:https://codepen.io/OSquiddy/pen/ExmrMzX
我也去掉了动画,因为你想要的可以很容易地通过过渡来完成。