일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 가을 감성
- 티스토리챌린지
- Fe
- polling
- useState
- zustand
- 비제어
- react
- eslint
- Context API
- 코딩 테스트
- frontend
- form
- tailwind css
- 개발자
- CSS
- 협업
- react-query
- Study
- package.json
- js
- 프레임 워크
- 개발자 도구
- 개발
- 오블완
- PullRequest
- prettier
- next.js
- github
- Pr
- Today
- Total
ougi FE
classnames 사용하여 조건부 스타일 지정하자! 본문
저는 Tailwind를 이용해 웹페이지를 구현할 때
동적인 스타일링을 구현하기 위해서 종종 삼항 연산자를 사용해왔습니다.
하지만 이 방법은 코드가 너무 지저분해진다는 문제가 있었습니다.
오늘은 그 문제를 해결해 줄 수 있는 classnames 라이브러리를 소개해 드리겠습니다.
❓ classnames란?
classnames 라이브러리는 조건부로 CSS 클래스를 적용할 수 있게 해주는 JavaScript 라이브러리입니다.
여러 개의 CSS 클래스를 간편하게 결합하거나 특정 조건에 따라 클래스 이름을 동적으로 추가할 수 있습니다.
Tailwind 또는 CSS Modules와 많이 쓰인다고 합니다.
장점
- 코드 가독성이 높아집니다.
- 동적 스타일 적용이 쉬워집니다.
- 라이브러리 크기 작아집니다.
단점
- 기본적으로 타입이 정해져 있지 않아서 TypeScript 환경에서 사용 시 타입 정의를 추가해야 합니다.
- 추가 설치 해야 합니다.
🎯 사용법
저는 오늘 tailwind와 같이 사용해보겠습니다.
npm i classnames
먼저 라이브러리를 설치해줍니다.
import React, { useState } from 'react';
import classNames from 'classnames'; // classnames 라이브러리 import
export function Example() {
const [isActive, setIsActive] = useState(false);
return (
<div className="p-4">
<button
onClick={() => setIsActive(!isActive)}
className={classNames(
'px-4 py-2 rounded', // 공통 스타일
{
'bg-blue-500 text-white': isActive, // true일 때
'bg-gray-300 text-black': !isActive, // false일 때
}
)}
>
{isActive ? '날 눌러줘~' : '누르지마..'} // text
</button>
</div>
);
}
이 코드는 제가 간단하게 작성해본 토글 버튼입니다.
누를 때마다 isActive 값이 true false로 바뀌면서 스타일이 바뀌게 됩니다.
이렇게 간단하게 조건부 스타일링을 깔끔하게 할 수 있는 classnames 라이브러리 입니다.
공통 스타일: 패딩, border-radius(둥근 모서리)
Active(true): 파랑 배경, 하얀 글씨
!isActive(false): 회색 배경, 검은 글씨
✨ 글을 마치며
오늘은 제가 조건부 스타일링을 깔끔한 코드로 보여줄 수 있는 classnames 라이브러리를 소개 해봤습니다.
여러분들도 조건부 스타일링을 하다 코드가 더러워보이면 사용해보시면 좋을거 같습니다.🧹
그리고 제가 놓친 부분도 있을 수 있으니 참고 해보시면 좋을거 같습니다.
https://github.com/JedWatson/classnames
읽어주셔서 감사합니다!!
'CSS' 카테고리의 다른 글
[CSS] 트랜지션(Transition) 공부해서 잘 사용하자!!🖌️ (0) | 2024.09.16 |
---|---|
[CSS] Tailwind CSS 그게 뭔데!!🎨 (4) | 2024.09.02 |
[CSS] 반응형 웹에 대하여 (0) | 2024.07.26 |
[CSS] position과 z-index 속성에 대하여 (0) | 2024.07.21 |