CSS-in-JS
라이브러리로, 컴포넌트 단위로 스타일을 작성할 수 있도록 도와줍니다.CSS-in-JS
란 ?... JavaScript 코드 안에서 직접 CSS를 작성하는 방식. 즉, CSS 파일이 따로 존재하지 않아도 됨[기존_React]
[Styled Components를_사용한_React]
[ 설치 ]
npm install styled-components
[ 불러오기 ]
import styled from "styled-components"
[ 추가_Extension ]
CSS 속성 자동완성 기능 : vscode-styled-components
const 컴포넌트이름= styled.태그종류`
CSS속성1 : 속성값;
CSS속성2 : 속성값;
`;
<컴포넌트이름> 내용 </컴포넌트이름>
import styled from 'styled-components';
const Button = styled.button`
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
border: none;
cursor: pointer;
&:hover {
background-color: darkblue;
}
`;
const App = () => {
return <Button>클릭하세요</Button>;
};
export default App;
styled-components
는 scss 문법을 지원한다&:hover
는 SCSS 사용법과 동일하게 자기 자신을 뜻한다.const 컴포넌트이름= styled(재사용할 컴포넌트)`
추가할 CSS속성1 : 속성값;
추가할 CSS속성2 : 속성값;
`;
import styled from 'styled-components';
const Button = styled.button`
background-color: blue;
color: white;
padding: 10px 20px;
border-radius: 5px;
border: none;
cursor: pointer;
&:hover {
background-color: darkblue;
}
`;
const ButtonReSize = styled(Button)`
width: 200px;
height: 70px;
`;
const App = () => {
return (
<Button>클릭하세요</Button>;
<ButtonReSize>버튼 사이즈를 지정하여 재사용 하는 컴포넌트</ButtonReSize>
)
};
export default App;
"클릭하세요"
버튼에 적용한 Button 컴포넌트를 재사용 하는 컴포넌트 버튼에 적용한 ButtonReSize 컴포넌트를 만들어서,◼️ 추가 내용 - [class명 자동 부여]
- [페이지검사] -> [엘리먼트 탭]을 보면 해당 버튼에 클래스명 무작위 자동부여
styled-components를 생성할 때 자동적으로 겹치지 않는 클래스명을 해당 엘리먼트에 부여하며,
이 클래스명을 사용하여 작성한 css 코드와 요소를 매칭시켜서 css 코드를 매칭시켜서 styled-components 를 완성 시켜준다- 기본
Button
이라는 컴포넌트에는 클래스 명이 alkk sjsj 로 부여 되었다면,
기본 Button 을 이용한 재사용 컴포넌트ButtonReSize
에는 alkk djdj sjsj vhju 이런 식으로 기본 컴포넌트 클래스 명이 포함되어 있다
const 컴포넌트이름= styled.태그종류`
CSS속성 : ${ props => 함수 코드 }
`;
<컴포넌트이름 함수코드="원하는 속성"> 내용 ! </컴포넌트이름>
const Button = styled.button`
background-color: ${(props) => (props.primary ? "blue" : "gray")};
color: ${(props) => props.textColor || "white"};
padding: 10px 20px;
`;
const App = () => {
return (
<>
<Button primary>Primary 버튼</Button>
<Button textColor="black">textColor 버튼</Button>
</>
);
};
<Button primary\>Primary 버튼</Button\>
: background-color를 선언한 primary 함수가 true 이면 속성값을 blue로 false일 경우 gray로 조건식<Button textColor="black"\>textColor 버튼</Button\>
: color를 선언한 textColor 함수의 기본 값은 white이지만, black 으로 지정import { createGlobalStyle } from "styled-components"
const GlobalStyle = createGlobalStyle`
전역 CSS속성1 : 속성값;
전역 CSS속성2 : 속성값;
`;
< GlobalStyle /> //최상위 컴포넌트에 가져다 쓰기!
<GlobalStyle>...</GlobalStyle>
❌<GlobalStyle />
✅import { createGlobalStyle } from "styled-components";
const GlobalStyle = createGlobalStyle`
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background-color: #8ec4fa;
color: #333;
display: flex;
justify-content: center;
text-align: center;
}
`;
const App = () => {
return (
<>
<GlobalStyle />
<h1>Styled Components Global Style</h1>
<p>전역 스타일이 적용되었습니다.</p>
</>
);
};
export default App;
body
의 기본 폰트와 배경색, flex 정렬이 설정됨*
를 사용하여 margin, padding 초기화 (CSS 리셋)-- 여기에 rgb 값 바뀌는 프로젝트 링크 넣으셈
비교 항목 | 일반 CSS | Styled Components |
---|---|---|
스타일 적용 방식 | 전역 스타일 | 컴포넌트 단위 스타일 |
유지보수 | 스타일 충돌 가능 | 컴포넌트별 스타일 격리 |
동적 스타일 | 제한적 | props를 활용한 동적 스타일 가능 |
코드 가독성 | 스타일과 로직 분리됨 | 한 파일에서 스타일과 로직 관리 가능 |