Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- test
- java
- react-hook-form
- 티스토리챌린지
- designpatterns
- backend
- Redux
- component
- React
- Chakra
- 오블완
- javascript
- 웹애플리케이션서버
- springboot
- JavaSpring
- storybook
- go
- satisfiles
- ReactHooks
- golang
- RTK
- Spring
- tanstackquery
- hook
- css
- JPA
- typescript
- frontend
- Gin
Archives
- Today
- Total
bkdragon's log
module css, classnames로 조건부 스타일링 본문
classnames는 조건부로 스타일링을 편하게 할 수 있는 라이브러리이다.
{클래스명 : 조건식}
형태로 조건식이 참일 경우 클래스명을 추가할 수 있다.
공식 문서 예제를 몇가지 살펴보자.
https://www.npmjs.com/package/classnames
기본 형태 {클래스명 : 조건식} 의 형태이나 조건식 생략이 가능하며 그 경우에는 true이다.
classNames('foo', 'bar'); // => 'foo bar'
classNames('foo', { bar: true }); // => 'foo bar'
classNames({ 'foo-bar': true }); // => 'foo-bar'
classNames({ 'foo-bar': false }); // => ''
classNames({ foo: true }, { bar: true }); // => 'foo bar'
classNames({ foo: true, bar: true }); // => 'foo bar'
템플릿 리터럴을 사용할 수 있다. (당연하게도)
let buttonType = 'primary';
classNames({ [`btn-${buttonType}`]: true });
특정 조건에서 기존에 적용되던 class값을 없앨 수 있다.
classNames('foo', { foo: false, bar: true }); // => 'bar'
이제 modules css와 bind를 활용한 막강한 패턴을 소개해보겠다.
css가 다음과 같을 때
my.module.scss
.item {
width: 100%;
height: 100px;
border: 1px solid lightgray;
}
.item_highlight {
@extend .item;
background-color: lightgrey;
}
특정 변수(조건)에 따라 className을 추가해줄 수 있다.
my.tsx
...
import classnames from 'classnames/bind'; // bind!
import styles from './my.module.scss';
const cn = classnames.bind(styles);
...
...
return (
<div
className={cn({
item: true,
item_highlight: isHighlight
})}
>
<span>item</span>
</div>
)
...
한결 편하게 조건부 스타일링을 할 수 있을 것 같다.
'concept' 카테고리의 다른 글
flex-item (0) | 2023.08.30 |
---|---|
MVVM 패턴 (0) | 2023.08.10 |
Async Custom Hook Testing (0) | 2023.08.02 |
[TEST] Redux 테스트 (0) | 2023.07.29 |
CORS 요리 (0) | 2023.07.29 |