Как плавно перейти к заполнению пространства элемента с абсолютным позиционированиемCSS

Разбираемся в CSS
Ответить
Anonymous
 Как плавно перейти к заполнению пространства элемента с абсолютным позиционированием

Сообщение Anonymous »

Я пытаюсь получить список элементов для плавного перехода в зависимости от того, добавляется или удаляется один из них. Суть этого заключается в плавном переходе к заполнению пространства недавно измененного элемента с абсолютным позиционированием. В этом примере применяется плавное перемещение к последующему элементу в списке, что является всего лишь правилом облегчения перехода.
Я пытаюсь воссоздать следующий пример:
https: //vuejs.org/examples/#list-transition
Вот базовый тест, я не пытаюсь показать весь переход элементов, просто переход для заполнения пространства оставленный пунктом выше. Я включил в элементы класс постепенного перемещения по умолчанию, чтобы избежать проблем с синхронизацией. Но я не уверен, почему, когда к элементу 1 применяется абсолютное значение, элемент 2 подпрыгивает, заполняя пространство, а не плавно скользит вверх, как в примере с Vue.
Test.tsx
import classNames from 'classnames';
import React, { useEffect, useRef, useState } from 'react';

const Test: React.FC = () => {
const [show, setShow] = useState(true);
const [currentClass, setCurrentClass] = useState('');
const elementRef = useRef(null);

const toggleShow = () => {
setShow(prevShow => !prevShow);
};

useEffect(() => {
if (show) {
setCurrentClass('fade-enter-from');
requestAnimationFrame(() => {
setCurrentClass('fade-enter-active fade-enter-to');
});
} else {
setCurrentClass('fade-leave-from');
requestAnimationFrame(() => {
setCurrentClass('fade-leave-active fade-leave-to');
});
}
}, [show]);

return (


Toggle Element



Element 1

Element 2


);
};

export default Test;

app.css
.container {
position: relative;
padding: 0;
list-style-type: none;
}

.item {
width: 100%;
height: 60px;
background-color: #f3f3f3;
border: 1px solid #666;
box-sizing: border-box;
transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1); /* Apply transition to all items by default */
}

.fade-move,
.fade-enter-active,
.fade-leave-active {
transition: all 0.5s cubic-bezier(0.55, 0, 0.1, 1);
}

/* 2. declare enter from and leave to state */
.fade-enter-from,
.fade-leave-to {
opacity: 0;
transform: scaleY(0.01) translate(30px, 0);
}

/* 3. ensure leaving items are taken out of layout flow so that moving
animations can be calculated correctly. */
.fade-leave-active {
position: absolute;
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... ed-element
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»