Kozack
@Kozack
Thinking about a11y

Как правильно сделать анимацию с display:none?

Есть вот такой фиксированный блок.
<div class="side-panel"></div>
.side-panel {
  position: fixed;
  top: 0;
  right: 0;

  transform: translate(400px, 0);
  transition: transform .3s

  height: 100%;
  width: 400px;
}

body.side-panel-opened .side-panel {
  transform: translate(0, 0);
}

По задумке, он плавно выплывает из-за правого края экрана. Но, сейчас, когда он за пределами экрана, он всё равно видимый. Я хочу, чтобы когда он скрылся, у него было свойство display: none
Те, изначально блок позиционирован за пределами экрана и не отображается. Потом, когда на родителе появляется соответствующий класс, элемент становится видимым и начинает плавно выезжать из-за края. Когда класс с родителя удаляется, элемент плавно уезжает за край экрана и когда полностью уедет — перестаёт отображаться.
  • Вопрос задан
  • 2211 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ma4t
Можно добавить при удалении класса что-то вроде transition: display .3s

То есть у Вас есть время анимации для transform, задается такое же для дисплей и когда элемент уедет за "экран" , по истечении времени сработает транзишн дисплей none и блок пропадет...

скорее всего лучше через animation keyframes сделать, чтобы срабатывало на 100% (когда время истекает)
0% display: block
100% display: none
Ответ написан
http404ntfnd
@http404ntfnd
junior front-end developer
.side-panel {
visibility: hidden;
opacity: 0;
-webkit-transition: visibility 1s,opacity .5s ease;
-o-transition: visibility 1s opacity .5s ease;
transition: visibility 1s opacity .5s ease;
}

body.side-panel-opened .side-panel {
visibility: visible;
opacity: 1;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы