Помогите с анимацией пожалуйста
почему меню появляется моментально, а не плавно?
<header>
<div class="container">
<div class="header__content">
<div class="header__logo">
<img src="../dist/img/svg/logo.svg" alt="#">
</div>
<div class="header__nav" id="mobileMenu">
<nav>
<ul>
<li><a href="#">Как это работает?</a></li>
<li><a href="#">Для кого</a></li>
<li><a href="#">Кейсы</a></li>
<li><a href="#">Тарифы</a></li>
<li><a href="#">Безопасность</a></li>
<li class="header___link_mobile"><a href="#">Контакты</a></li>
<li class="header___link_mobile"><button class="header___link_button">Вход</button></li>
</ul>
</nav>
<div class="header__lang">
<a href="#">RU</a>
<a href="#">EN</a>
</div>
<div class="header__button">
<button>Подключиться</button>
</div>
</div>
<div class="header__burger burger" id="burgerButton">
<div class="burger__line"></div>
<div class="burger__line"></div>
</div>
</div>
<!-- <div class="header__nav_mobile">
<nav>
<ul>
<li><a href="#">Как это работает?</a></li>
<li><a href="#">Для кого</a></li>
<li><a href="#">Кейсы</a></li>
<li><a href="#">Тарифы</a></li>
<li><a href="#">Безопасность</a></li>
</ul>
</nav>
</div> -->
</div>
</header>
.header__nav{
display: flex;
nav{
display: none;
transform: translateY(-1000px);
transition: all 1s linear;
}
}
.header__nav_active{
overflow-y: hidden;
nav{
transform: translateY(38px);
transition: all 1s linear;
display: flex;
flex-direction: column;
position: absolute;
left: 0;
height: 90vh;
width: 100%;
background-color: #000;
justify-content: center;
align-items: center;
ul{
padding: 0;
list-style-type: none;
li{
text-align: center;
margin-bottom: 20px;
a{
text-decoration: none;
font-size: 18px;
line-height: 23px;
letter-spacing: 0.96px;
color: #555E68;
}
}
}
}
}
Ответы (1 шт):
Автор решения: CbIPoK2513
→ Ссылка
Как сказал @Stranger in the Q в комментариях:
display - не анимируется
Но есть вариант, допустим вам нужно плавное появление и исчезновение, то можно сделать следующее:
$('.toggle').on('click', function(){
$('.overlay').toggleClass('--active');
});
body {
margin: 0;
}
.toggle {
display: inline-block;
color: red;
margin: 10px;
cursor: pointer;
}
.overlay {
display: block;
width: 100%;
height: 100%;
background: #000;
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1;
/* */
opacity: 0;
pointer-events: none;
transition: all .5s linear;
}
.overlay.--active {
opacity: 1;
pointer-events: all;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="toggle">Открыть</div>
<div class="overlay">
<div class="toggle">Закрыть</div>
</div>
Вариант с увеличением.
$('.toggle').on('click', function(){
$('.overlay').toggleClass('--active');
});
body {
margin: 0;
}
.toggle {
display: inline-block;
color: red;
margin: 10px;
cursor: pointer;
}
.overlay {
display: block;
width: 100%;
height: 100%;
background: #000;
position: fixed;
left: 0;
top: 0;
right: 0;
bottom: 0;
z-index: 1;
/* */
transform: scale(0);
pointer-events: none;
transition: all .5s linear;
}
.overlay.--active {
transform: scale(1);
pointer-events: all;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="toggle">Открыть</div>
<div class="overlay">
<div class="toggle">Закрыть</div>
</div>
Но варианты хромают, кто как..
Первый вариант может быть прозрачным, но иметь таргет зоны, если pointer-events не поддерживается браузером. О поддержке - ссылка
Второй вариант тоже в принципе может отображаться постоянно, если браузер не поддерживает transform: scale