:ledger: tailwind에서 hover 하는 방법을 알아보자.

Next.js를 사용하면서 tailwind와 친해지는 시간이 많아졌다. hover는 어떻게 사용하는지 알아보자.

:one: 기본적인 hover 효과 적용하기

기본적으로 간단한 hover 효과는 배경색,텍스트 색상을 변경하는 것이다. 아래의 예시를 통해 알아보자.

// 기본 사용법 hover:클래스 추가
<button className="bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-700">호버하셈</button>

:two: custom class 사용하기

@apply 지시어를 사용해서 CSS 파일에서 커스텀 클래스를 정의할 수 있다.

@tailwind base;
@tailwind components;
@tailwind utilities;

.btn-hover {
  @apply bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-700;
}

위와 같이 설정 후 아래와 같이 사용할 수 있다.

<button class="btn-hover">커스텀 호버 버튼임</button>

:three: group 클래스 사용하기

group 클래스를 사용하면, 부모 요소에 hover 효과를 적용하고 자식 요소에서 group-hover 클래스를 사용해서 부모 요소가 hover될 때 요소의 스타일을 변경할 수 있다. 예시는 아래와 같다.

<div className="group p-4 border-2 border-gray-300 rounded transition-all duration-300 hover:bg-gray-100">
  <h2 className="text-gray-800 group-hover:text-blue-500">부모 요소에 마우스를 올리면 텍스트 색상이 변경</h2>  
</div>

:four: 실제 사용 예시

이번 Next.js 프로젝트를 진행하며, 리스트 아이템에 group 클래스를 사용해서 마우스 호버시 scale 처리 및 opacity를 제거하도록 적용해주었다.

  • 예시 이미지

hover-example

  • 작성 코드
<div className="group relative w-[calc(25%-10px)] overflow-hidden max-n:w-[calc(33.333%-10px)] max-t:w-[calc(50%-10px)] max-m:w-[100%] rounded-[10px] shadow-custom">      
  <div className="champion-list-image w-full py-[30%]">
    {
      loading ? (
        <div className="loading-ui">
          <p className="bg-loading">로딩중입니다.</p>
        </div>
      ) : ("")
    }

    {champion.image && (
      <Image 
        src={`${RIOT_BASE_URL}/cdn/img/champion/splash/${champion.id}_0.jpg`} 
        className="w-full h-full transition-all duration-500 ease-in-out transform group-hover:scale-110"
        layout="fill"
        alt={champion ? champion.name : "챔피언 이미지"} 
        onLoadingComplete={handleLoadingComplete}         
      />
    )}
  </div>
  <h2 className="absolute top-[5px] right-[5px] z-20 min-w-[120px] flex items-center justify-center p-[8px] font-medium bg-black bg-opacity-70 rounded-[10px] max-t:text-[14px]">{champion.name}</h2>              
  <div className="info absolute top-0 left-0 w-full h-full z-10 bg-black bg-opacity-50 transition duration-500 ease-in-out group-hover:bg-opacity-0"></div>                  
  <Link href={`/champions/${champion.id}`} className="absolute top-0 left-0 flex w-full h-full opacity-0 z-30">{champion.name} 상세페이지로 이동</Link>
</div>

:fire: 마무리

유틸리티 클래스를 활용하여 인터랙티브한 UI를 만들 수 있게 되었으며, transition 과 다른 커스텀 클래스를 추가해서 화려한 모션을 줄 수 있는 것 같다.

태그:

카테고리: ,

업데이트: