Изменение размера элементов в гибком контейнере при использовании блоков Svelte #if

Я использую Svelte и flexbox для добавления и удаления элементов из контейнера, при этом динамически изменяя размер постоянных элементов внутри контейнера, чтобы всегда занимать оставшееся пространство.

Я бы хотел добавить и убрать переходы элементов с помощью стройной «мухи».

Вот в чем проблема: постоянные элементы сразу же неуклюже прыгают до своих новых размеров, а не плавно анимируются вместе с входящими / выходящими элементами. Как сделать постоянные элементы анимированными при изменении их размера?

Я знаю, что это можно сделать с помощью анимированного «переворота», но это разрешено только внутри блока #each. Я надеюсь использовать блоки #if для управления входом и выходом элементов.

У меня есть ответ с образцом , но я также покажу код ниже.

JS

      import { fly } from 'svelte/transition'
let add = false;

HTML

      <main>
{#if add}
    <div transition:fly="{{ y: -200, duration: 2000 }}" class='box' id='add'>
        Added element
</div>
{/if}

<div class='box' id='permanent'>
    I would like this element resize smoothly when a new elements is added to the parent container.  Can I do this without an each block, though?
</div>

<button on:click={() => add = !add}>
    {add ? 'Remove ' : 'Add '} element
</button> 

CSS

      main {
    height: 100%;
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.box {
    border: 1px solid black;
    min-height: 50px;
}

#permanent {
    flex: 1;
    display: flex;
    text-align: center;
    flex-direction: column;
    justify-content: center;
}

0 ответов

Другие вопросы по тегам