diff --git a/src/views/TodoNotes.vue b/src/views/TodoNotes.vue index 3103ced..21a6477 100644 --- a/src/views/TodoNotes.vue +++ b/src/views/TodoNotes.vue @@ -388,12 +388,14 @@ const createTodoFile = async () => {
  • - +
    + +
  • @@ -431,35 +433,35 @@ const createTodoFile = async () => { display: flex; flex-direction: column; gap: 0.25rem; - position: relative; li { list-style: none; + // Use grid-template-rows 1fr → 0fr so the row's height (and therefore + // the surrounding gap) collapses smoothly during leave instead of + // snapping closed when the DOM node is removed. + display: grid; + grid-template-rows: 1fr; } } + .todo-li-inner { + overflow: hidden; + min-height: 0; + } + .todo-enter-active, .todo-leave-active { transition: opacity 180ms ease, - transform 220ms ease; - } - - .todo-enter-from { - opacity: 0; - transform: translateX(-12px); + transform 220ms ease, + grid-template-rows 220ms ease; } + .todo-enter-from, .todo-leave-to { opacity: 0; - transform: translateX(12px); - } - - // Take the leaving item out of layout flow so the rest of the list - // slides up smoothly via .todo-move instead of jumping. - .todo-leave-active { - position: absolute; - width: 100%; + transform: translateX(-12px); + grid-template-rows: 0fr; } .todo-move {