Есть похожие вопросы, такие как это и это , но не решайте эту ситуацию.
Цель состоит в том, чтобы сдвинуть меню на экран с помощью CSS перевод, когда отображается его родитель. Однако показ родительского элемента с последующим применением класса CSS для запуска перевода происходит мгновенно, а не со временем. По сути, анимация отсутствует.
JavaScript можно использовать для перемещения дочернего элемента на экран, но цель состоит в том, чтобы сохранить как можно больше логики анимации c в CSS.
Установка непрозрачности на 0 не работает, потому что нам нужно, чтобы меню и его родительские элементы не занимали места и не были частью макета.
Codepen: https://codepen.io/Crashalot/pen/YzXmjYj
function toggleSidebar() {
$("#sidebar").toggleClass("show");
}
$("#button").on("click", function() {
toggleSidebar();
});
body {
margin: 0;
padding: 0;
}
#button {
position: fixed;
top: 0;
left: 200px;
width: 150px;
height: 50px;
background: yellow;
display: flex;
justify-content: center;
align-items: center;
z-index: 8;
cursor: pointer;
}
#sidebar {
display: none;
}
#sidebar.show {
display: block;
}
.overlay {
position: fixed;
width: 100vw;
height: 100vh;
background: red;
z-index: -1;
}
.menuBox {
width: 200px;
height: 100vh;
background: blue;
transition: 0.3s ease-in-out;
transform: translate(-100%);
}
#sidebar.show .menuBox {
transform: translate(0);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="sidebar">
<div class="overlay"></div>
<div class="menuBox"></div>
</div>
<div id="button">CLICK ME</div>