05.React Styled-components, SASS(SCSS)
Updated:
1.styled-components
컴포넌트가 많은 경우 스타일링을 하다보면 불편함이 생기는데
-
class 만들어놓은걸 까먹고 중복해서 또 만들거나
-
갑자기 다른 이상한 컴포넌트에 원하지않는 스타일이 적용되거나
-
CSS 파일이 너무 길어져서 수정이 어렵거나
이런 경우가 있습니다.
컴포넌트 제작할 때 스타일을 바로 입혀서 컴포넌트를 만들어버릴 수도 있는데
styled-components라는 인기 라이브러리를 설치해서 사용하면 됩니다.
1-1.설치
$ yarn add styled-components
- 사용하고자 하는 파일에 import 합니다
import styled from 'styled-components'
1-2.기본적인 사용법
- CSS 를 미리 입혀놓은 컴포넌트 (className 작명 필요없음)
// styled component 생성 styled.tag명` ` backtick 기호 사이에 css code 를 사용하면 됨
const Box = styled.div`
padding: 20px;
`;
function Detail(props) {
return (
<div className="container">
// styled component 적용
<Box>
<Title>Detail</Title>
</Box>
<div className="row">
1-3.props로 스타일링 하기
여러가지 사용법 중 가장 유용한건 바로 props로 스타일링하는 방법입니다.
여러가지 비슷한 UI가 필요한 경우 어쩌죠?
예를 들면 위에서 만든 제목 (h4) 요소가 여러가지 색깔 버전으로 필요할 때 어떻게 하냐는 것이죠.
그럼 제목요소를 여러번 복붙하는 것 보다는
다양한 스타일이 필요한 곳에서 props 문법을 이용해 개발해주시면 됩니다.
예를 들면 이렇습니다.
const Title = styled.h4`
font-size: 25px;
color : ${ props => props.color }
`;
<Title color="blue">Detail</Title>
<Title color={'red'}>Detail</Title>
참고!! 리액트에서 props 전송하실 땐 두가지 방법이 있습니다.
-
일반 텍스트를 전달하고 싶으면 “ “ 안에 사용하면 되고
-
변수나 자료형을 사용하려면 { ‘ ‘ } 식으로 중괄호 안에 넣어야 됩니다.
1-4.styled-components 장점
하지만 styled-component의 극강의 장점은 CSS 막짜도 된다는겁니다.
-
스타일넣을 때 다른 파일이랑 컴포넌트 명이 겹쳐도 전혀 CSS적으로 문제가 생기지 않습니다.
-
그리고 나중에 컴포넌트 스타일 수정을 원할 때 CSS가 아니라 컴포넌트 파일을 찾으면 되니 수정도 편리하고요.
2.SASS (SCSS) for react
CSS는 주먹구구식으로 작성하면 되는 원초적인 스타일링 언어입니다.
근데 CSS를 조금 더 프로그래밍언어스럽게 다룰 수 있는 CSS 대체 문법이 존재합니다.
SASS라는 pre-processor 입니다. 이걸 이용하면 변수, 반복문, 함수 이런 문법으로 CSS를 작성할 수 있습니다.
그리고 SASS 문법으로 스타일을 쭉 작성하셨다면 다시 CSS로 컴파일을 하셔야합니다.
그건 node-sass 라는 라이브러리가 자동으로 알아서 해주기 때문에 그래서 방금 설치한겁니다.
2-1.node-sass 설치 및 세팅
🔶 주의 node-sass 를 설치하려면 nodejs 14버전 이하를 사용해야 잘 작동합니다.
$ yarn add node-sass@4.14.1
- 같은 경로에 scss 파일 생성 후 import 해줌
// in Details.js import './Details.scss';
2-2. SASS 문법
1.변수 사용
scss파일에선 변수를 사용할 수 있습니다. 이렇게 사용합니다.
// in Detail.scss
$mainColor : #ff0000;
.red {
color : $mainColor;
}
$변수명 : 집어넣을값;
이렇게 변수를 만들고 원하는 곳에서 사용가능합니다.
색상 뿐만 아니라 px값 %값 별걸 다 집어넣을 수 있습니다.
2.import
- 보통 공통으로 적용되는 부분들 reset.scss 라는 파일을 만들고 각 scss 파일에서 import 해와서 적용시킬 수 있음
body {
margin : 0;
}
div {
box-sizing : border-box;
}
3.nesting 문법
CSS 짜다보면 셀렉터를 길게 복잡하게 알아보기 힘들게 쓰는 경우가 있습니다.
scss파일 안에선 셀렉터 말고 이런 식으로도 개발이 가능합니다.
div.container {
h4 {
color : blue;
}
p {
color : green;
}
}
그냥 셀렉터를 옆으로 길게 나열하는게 아니라 안쪽에다가 작성합니다.
이게 nesting 문법입니다.
h4 {} 이렇게 안쪽에 쓰시면 띄어쓰기 셀렉터랑 같은 의미입니다.
굳이 이렇게 쓰는 이유는
-
셀렉터 해석이 쉽고
-
관련된 class끼리 뭉텅이로 관리하기 편해서 입니다.
4.extends 문법
.my-alert {
background : #eeeeee;
padding : 15px;
border-radius : 5px;
max-width : 500px;
width : 100%;
margin : auto;
}
.my-alert p {
margin-bottom : 0;
}
function Detail(){
return (
<div>
<HTML많은곳/>
<div className="my-alert">
<p>재고가 얼마 남지 않았습니다</p>
</div>
</div>
)
}
Q. 근데 갑자기 빨간색, 파란색 등 다양한 배경색의 알림창이 또 필요해지면 어쩌죠?
A. 손수복붙하지 않고 @extend 문법을 이용합니다.
.my-alert {
background : #eeeeee;
padding : 15px;
border-radius : 5px;
max-width : 500px;
width : 100%;
margin : auto;
}
.my-alert2 {
@extend .my-alert;
background : yellow;
}
.my-alert p {
margin-bottom : 0;
}
@extend
이렇게 사용하시면 어쩌구라는 클래스명에 들어있던 모든 내용을 그 자리에 복붙해줍니다.
CSS코드를 재사용할 일이 있을 때 손수 복붙 안하셔도되고 비슷한 UI 만들기도 쉬워집니다.
5.@mixin / @include 문법
mixin은 그냥 함수만드는 문법입니다. (함수문법은 코드 축약하고 재사용할 때 많이 쓰죠?)
SASS에선 function 키워드 대신 @mixin
이라고 쓰시면 되고
중괄호 안에 내가 축약하고 싶은 코드들을 다 담으시면 됩니다.
그리고 함수를 부를 땐 @include
함수명() 이렇게 불러줍니다.
@mixin def() {
background : #eeeeee;
padding : 15px;
border-radius : 5px;
max-width : 500px;
width : 100%;
margin : auto;
}
.my-alert {
@include def()
}
.my-alert p {
margin-bottom : 0;
}
- 📌 자바스크립트 문법과는 다르게 함수명이 위에 선언되어있어야 밑에서 사용가능합니다
🔶 🔷 📌 🔑
Reference
-
react official page- https://reactjs.org/docs/getting-started.html
-
styled components docs - https://styled-components.com/docs
-
coding apple - https://www.youtube.com/watch?v=LclObYwGj90&list=PLfLgtT94nNq1e6tr4sm2eH6ZZC2jcqGOy
Leave a comment