- css : 기본 방식
- Sass : CSS 전처리기.
- CSS Module : CSS 클래스 충돌하지 않도록 고유한 이름 자동 생성
- Styled-components : 스타일을 JS 파일 안에 내장
일반 CSS
- CSS를 작성할 때 가장 중요한 점은 CSS 클래스를 중복되지 않게 만드는 것
- 이름을 지을 때 특별한 규칙을 사용하여 짓는 것
- 클래스 이름에 컴포넌트 이름을 포함시킴으로써 다른 컴포넌트에서 실수로 중복되는 클래스를 만들어 사용하는 것을 방지할 수 있죠.(예: App-header)
- 일종의 규칙을 준수하여 해당 클래스가 어디에서 어떤 용도로 사용되는지 명확하게 작성하는 방식 예를 들어 .card__title-primary
- CSS Selector를 활용하는 것입니다.
- CSS Selector를 사용하면 CSS 클래스가 특정 클래스 내부에 있는 경우에만 스타일을 적용할 수 있습니다. .App .logo
- 이름을 지을 때 특별한 규칙을 사용하여 짓는 것
Sass
- 복잡한 작업 쉽게, 스타일 코드의 재활용성, 가독성 높여 유지보수 쉽게
- .scss와 .sass가 있지만 css 문법과 비슷한 .scss 사용
- CSS selector 편리하게 사용
- 클래스{} 안에 클래스 적용하면 동일한 기능.
- SassComponet 클래스 안에 있는 .box 클래스 사용
- mixin : 재사용되는 스타일 블록을 함수처럼 사용가능
- 여러 파일에서 사용될 수 있는 Sass 변수 및 믹스인은 다른 파일로 따로 분리하여 작성한 뒤 필요한 곳에서 쉽게 불러와 사용할 수 있습니다.
- 프로젝트 폴더 구조가 깊어졌다면 그 파일에 접근하기 위해 ../../../ 이런식으로 복잡해진다.
- sass-loader 커스타마이징으로 해결이 가능하다.
- 순서
- 먼저 git에 커밋하기
- yarn eject -> react-script eject -> y
- 생성된 config 폴더에 webpack.config.js파일 -> sassRegex 찾기
- 'sass-loader' 지우고 다음 코드 추가
concat({ loader: require.resolve('sass-loader'), options: { sassOptions: { includePaths: [paths.appSrc + '/styles'], }, sourceMap: isEnvProduction && shouldUseSourceMap, //prependData: `@import 'utils';`, }, }),
- 서버 재시작
- sass-loader을 커스터마이징 했다면 @import 'utils.scss' 만 적으면 된다.
- 더 편하게 위의 //prependData: @import 'utils';, 주석을 지우면 알아서 import 해준다.
CSS Module
- CSS Module은 CSS를 불러와서 사용할 때 클래스 이름을 고유한 값, 즉 [파일 이름]_[클래스 이름]__[해시값] 형태로 자동으로 만들어서 컴포넌트 스타일 클래스 이름이 중첩되는 현상을 방지해 주는 기술입니다.
- CSS Module을 사용하면 클래스 이름을 지을 때 그 고유성에 대해 고민하지 않아도 됩니다.
- 해당 클래스는 우리가 방금 만든 스타일을 직접 불러온 컴포넌트 내부에서만 작동하기 때문입니다.
styled-components
- 컴포넌트 스타일링의 또 다른 패러다임은 자바스크립트 파일 안에 스타일을 선언하는 방식입니다.
- 이 방식을 ‘CSS-in-JS’라고 부릅니다.
- 기존 돔을 만드는 방식인 css, scss 파일을 밖에 두고, 태그나 id, class이름으로 가져와 쓰지 않고, 동일한 컴포넌트에서 컴포넌트 이름을 쓰듯 스타일을 지정하는 것을 styled-components라고 부릅니다.css 파일을 밖에 두지 않고, 컴포넌트 내부에 넣기 때문에, css가 전역으로 중첩되지 않도록 만들어주는 장점이 있습니다.
스타일에 props 적용하기
- styled-component를 사용하는 장점 중 하나가 변수에 의해 스타일을 바꿀 수 있다는 점입니다.
- 위 예시를 보면 email이라는 state값에 따라 ExampleWrap에 prop으로 내려준 active라는 값이 true or false로 바뀌게 됩니다.
- styled-component는 내부적으로 props을 받을 수 있고, 그 props에 따라 스타일을 변경할 수 있습니다.
스타일 상속
- const 컴포넌트명 = styled.스타일컴포넌트명스타일 넣기...문법으로 만들어집니다.
- 기존에 있는 스타일컴포넌트를 상속받아 재사용합니다.
Mixin css props
- css props는 자주 쓰는 css 속성을 담는 변수입니다.
- css 변수명 = css스타일... 로 사용합니다.
'react를 다루는 기술' 카테고리의 다른 글
11. 컴포넌트 성능 최적화 (0) | 2022.06.13 |
---|---|
10. 일정 관리 웹 애플리케이션 만들기 (0) | 2022.06.11 |
8. Hooks(2) (0) | 2022.06.09 |
8. Hooks(1) (0) | 2022.06.08 |
7. 컴포넌트의 라이프사이클 메서드 (0) | 2022.06.07 |