Как анимировать отзывчивый div в Angular?

#javascript #css #angular #typescript #animation

#javascript #css #angular #typescript #Анимация

Вопрос:

У меня есть следующая анимация:

 @Component({
  ...
  animations: [
        trigger('fade', [
          transition(':enter', [
              style({'width': '0' }),
              animate(300, style({'width': '?'})) // responsive width here what can I do?
          ]),
          transition(':leave', [
              animate(200, style({'width': '0px'}))
          ])
    
      ])
      ]
})
  

и html-код:

 <div class="detail" *ngIf="hasPost" [@fade]>
    <app-post-detail></app-post-detail>
</div>
  

Итак, мне вообще интересно, как настроить анимацию, когда отвечает ширина или высота просто неизвестна, потому что в приведенном выше примере div с классом detail имеет разные размеры ширины:

 .detail {
    position: fixed;
    top: 0;
    right: 0;
    background-color: white;
    border-left: 1px solid white;
    width: 35%;
    height:100%;
    z-index: 20;
}

@media only screen and (max-width: 700px){
    .detail{
        width: 50%;
    }
    
}
  

Что бы я здесь сделал? Я попытался установить ширину на auto, но тогда анимация выглядит ужасно. Я должен передать правильную ширину, чтобы анимация работала, но что, если я не знаю точной ширины или высота просто неизвестна?

Ответ №1:

Вместо числа для ширины укажите *, как показано ниже

 @Component({
  ...
  animations: [
        trigger('fade', [
          transition(':enter', [
              style({'width': '*' }),
              animate(300, style({'width': '*'})) // responsive width here what can I do?
          ]),
          transition(':leave', [
              animate(200, style({'width': '*'}))
          ])
    
      ])
      ]
})
  

Комментарии:

1. Привет, спасибо за ваш ответ! Я попробую это прямо сейчас.

2. Это действительно работает, но у меня есть последний вопрос при использовании *ngIf . Содержимое отображается до того, как div расширится до максимальной высоты. Как я могу предотвратить такое поведение?

3. Да, задайте свой вопрос

4. Я обновил свой комментарий выше. У вас есть какие-либо идеи, как это решить?