1. Sass 사용하기
Scss도 있지만 문법만 다르고 사용 용도와 방법은 같다.
.scss 파일을 만들고
//util.scss
//변수 사용하기
$red: #fa5252;
$yellow: #fcc419;
$blue: #339af0;
$indigo: #5c7cfa;
$violet: #7950f2;
//mixin 만들기 (자주 사용되는 스타일을 함수처럼 만들어 재사용함)
@mixin square($size) {
$calculated: 32px * $size;
width: $calculated;
height: $calculated;
}
자주 사용하는걸로 변수와 함수같은 minxin을 만들어 재사용할 수 있다. 자주 사용될 이 변수와 믹스인들은 utils.scss 와 같은 곳에 저장하여 필요할 때 꺼내 쓰는 것이 좋다.
.SassComponent {
.box {
//일반 css에서의 .SassComponent .box 와 같다!!
background: $red;
&.red {
background: $red;
@include square(1);
}
&.yellow {
background: $yellow;
@include square(2);
}
&.blue {
background: $blue;
@include square(3);
}
}
}
그 아래 변수로 선언한 색과 함수를 include를 통해 사용할 수 있다.
여기서 &.red 스타일을 적용하고 싶다면 .box의 자식태그로 넣어주면 된다.
아래 js 파일에서 (컴포넌트에서) className = 'box red' 이렇게 속성을 추가하면 된다.
import '../SassComponent.scss'
const SassComponent = () => {
return (
<div className='SassComponent'>
<div className='box red'>red</div>
<div className='box yellow'>yellow</div>
<div className='box blue'>blue</div>
</div>
)
}
export default SassComponent
2. styled-components
.css 또는 .scss 등의 다른 확장자를 가진 파일을 따로 만들지 않아도 된다는 장점. js 안에 스타일을 작성할 수 있다.
import styled, {css} from 'styled-components'
//styled 된 div 를 만들어 하나의 Box 라는 이름으로 사용함 / props 가 있으면 그거로, 없으면 blue로 설정
const Box = styled.div`
background: ${props => props.color || 'blue'};
padding: 1rem;
display: flex;
`
//Button 이라는 이름의 button style / inverted가 true 일 때 색상 다르게 할 수 있음! 매우매우 편리
const Button = styled.button`
background : white;
color: black;
display: flex;
font-size: 1rem;
font-weight: 600;
&:hover {
background: rgba(255,255,255,0.9);
}
${props => props.inverted && css`
background: none;
color: white;
&:hover {
background: white;
color: black;
}
`}
`
hover
가장 큰 장점은 props 로 값을 전달해줄 수 있다는 것. 테마 등 상황별로 스타일을 내가 정해둔 대로 바꿀 수 있다는 점이 좋았다.
`` 백틱을 이용해 문자열 안에 원하는 데이터를 출력할 수 있다. 그러나 백틱 안에 객체나 함수를 넣으면 [object Object] 이렇게 뜨거나 함수 자체가 출력되는 걸 본 적이 있다. 이때는 tagged template literal 을 사용하면 되는데, 객체나 함수도 문자열화 해주기 때문에 그 원본 값을 그대로 추출할 수 있다.
이것을 이용해서 styled-component 에서 함수처럼 사용 가능하다.
function tagged(...args) {
console.log(args);
}
tagged`${{name: name}} ${() => 'hi'}`
위와 같은 문법을 tagged literal 이라고 한다.
'Computer Programming > [리액트를 다루는 기술]' 카테고리의 다른 글
[리액트를 다루는 기술] 11. 컴포넌트 성능 최적화 (1) | 2023.06.19 |
---|---|
[리액트를 다루는 기술] 10. Todo List 만들기 (2) | 2023.06.17 |
[리액트를 다루는 기술] 8. Hooks | Custom Hooks (0) | 2023.06.16 |
[리액트를 다루는 기술] 6. 컴포넌트의 반복 (map, key, 데이터 추가 및 삭제, concat, filter) (0) | 2023.06.15 |
[리액트를 다루는 기술] 4. 이벤트 핸들링 (0) | 2023.06.15 |