@tailwindui/react를 활용한 유틸리티 친화적 트랜지션

Robin Malfait

올해 2월, 우리는 Tailwind UI를 출시했습니다. 이는 여러분이 Tailwind 프로젝트에 복사하여 붙여넣을 수 있는 HTML 컴포넌트 예제 모음으로, 여러분의 디자인을 위한 출발점으로 사용할 수 있습니다.

우리는 Tailwind UI를 HTML 전용으로 제작하여 가능한 한 보편적으로 사용할 수 있도록 했습니다. 하지만 많은 디자인이 본질적으로 상호작용적이며, 이러한 상호작용 동작을 JavaScript 프레임워크 간에 이식하는 것은 항상 쉬운 일이 아닙니다.

이에 대한 한 가지 예는 드롭다운 메뉴를 토글할 때 나타나는 페이드 인/아웃과 같은 진입/퇴장 트랜지션입니다.

Vue.js는 진입/퇴장 트랜지션을 위한 매우 유틸리티 친화적인 API를 가진 <transition> 컴포넌트를 제공합니다:

<transition  enter-active-class="transition-opacity duration-75"  enter-from-class="opacity-0"  enter-to-class="opacity-100"  leave-active-class="transition-opacity duration-150"  leave-from-class="opacity-100"  leave-to-class="opacity-0">  <div v-show="isShowing">    <!-- 페이드 인/아웃 효과가 적용됩니다 -->  </div></transition>

하지만 이를 React에서 구현하는 것은 훨씬 더 어려운 일입니다. 지금까지 유틸리티 기반 트랜지션 스타일링을 지원하도록 설계된 라이브러리가 없었기 때문입니다.

그래서 이번 주 초, 우리는 @tailwindui/react의 첫 번째 버전을 출시했습니다. 이 라이브러리는 유틸리티 우선 HTML을 완전한 상호작용 UI로 변환하는 데 필요한 저수준 프리미티브를 제공합니다.

앞으로 몇 달 동안 드롭다운, 토글, 모달 등 더 많은 컴포넌트를 추가할 예정입니다. (Vue도 지원할 예정입니다!) 하지만 React 사용자들이 Vue와 Alpine.js에서 가능한 것과 동등한 경험을 할 수 있도록 <Transition> 컴포넌트부터 시작하기로 했습니다.

사용 예시는 다음과 같습니다:

import { Transition } from "@tailwindui/react";import { useState } from "react";function MyComponent() {  const [isOpen, setIsOpen] = useState(false);  return (    <div>      <button onClick={() => setIsOpen(!isOpen)}>Toggle</button>      <Transition        show={isOpen}        enter="transition-opacity duration-75"        enterFrom="opacity-0"        enterTo="opacity-100"        leave="transition-opacity duration-150"        leaveFrom="opacity-100"        leaveTo="opacity-0"      >        {/* 페이드 인/아웃 효과가 적용됩니다 */}      </Transition>    </div>  );}

문서를 읽어보세요 고급 기능에 대해 더 알아보세요:

  • 추가 DOM 엘리먼트 없이 렌더링하기
  • 관련 트랜지션 조정하기
  • 초기 마운트 시 트랜지션 적용하기

이 CodeSandbox 데모에서 실제 동작을 확인해 보세요:

여러분의 프로젝트에서 사용해 보세요. 문제가 발생하면 GitHub에 이슈를 등록해 주세요.

이 글에 대해 이야기하고 싶으신가요? GitHub에서 토론해 보세요 →

모든 업데이트를 직접 받아 볼 수 있습니다.
뉴스레터에 가입하세요.