[React] "styled-components" 패키지로 CSS in JS 방식의 스타일 부여하기

2024. 2. 1. 03:03·✍️ Today what I Learned _TIL
SMALL

240131 수 TIL ✍ 

 


이전에 리액트에서 배웠던 스타일링 방식은..

 

1) (일반) CSS

: 원래 html에서 css파일을 import해서 꾸몄던 방식과 거의 똑같다. jsx 문법에서는 태그에 className (그냥 class아님!) 을 부여해서, css파일에서 각각의 className마다 스타일 속성을 주었다.

(여기 css에서 쓰는 방식은 '객체' 형태가 아니다.   속성마다 콤마(,)로 연결하지도 않음)

// *App.jsx에서

...(생략)

const App = () => {
	return (
    	<div className="content"> 
    	...
        </div>
    );
};


// *위 jsx에 import된 css에서

.content {
	background-color: black;
}

 

2) 인라인 스타일링

: (따로 css파일 import해서 쓰는 게 아닌,) jsx파일 내에서 바로 해당태그에 style={{ ... }} 와 같이 쓰는 방식.

(중괄호가 2쌍인 이유는, 자바스크립트 문법을 쓰면서, 객체(key-value)로 스타일 속성을 넣어주기 때문. 각각의 속성은 콤마(,)로 연결된다.) 

(일반 css에서 속성이름?을 쓰는 방식과 조금 달라서 헷갈린다. 슬래시(-)가 아닌 카멜케이스형태로 쓴다든지. 또 다른 점들도 있다) 

// *.jsx파일 내에서*
...

const App = () => {
  return (
    <div style={{marginTop: 5px; backgroundColor: pink}}>
      ...
    </div>
  );
}

..

 

 

=>  3) 우리가 3번째로 배울 리액트 스타일링 방식은 styled-components란 npm 패키지를 설치해 쓰는 것! (emotion과 같은 다른 패키지도 있으나 styled-components가 가장 많이 사용되어온 패키지)


🎨 

<  styled - components > 란?

  • 리액트에서 CSS in JS 방식 (- 자바스크립트 코드로 CSS 코드를 작성하는 방식) 으로 컴포넌트를 꾸밀 수 있게 도와주는 패키지 
  • 이를 통해 스타일링 쓰는 방식은,  ` ` 백틱을 사용해서, 그 안은 일반 CSS 방식과 동일하게 써주면 된다. 그런데! 이 안에 ${ } 를 통해 자바스크립트 문법도 사용 가능! 
  • 또한 이렇게 쓴 스타일 컴포넌트를, jsx 문법 내에서 html태그를 쓰듯이 사용 가능
  • 조건부 스타일링이 가능!! (JS코드 작성하듯이 쓸 수 있어서)

   - VScode 플러그인 설치 후 yarn 혹은 npm 에서 설치해 (yarn add 혹은 npm install  styled-components) 사용가능

		
    // src/App.js
    
    import React from "react";
    // styled-components에서 styled 라는 키워드를 import 합니다.
    import styled from "styled-components";
    
    // styled키워드를 사용해서 styled-components 방식대로 컴포넌트를 만듭니다. 
    const StBox = styled.div`
    	// 그리고 이 안에 스타일 코드를 작성합니다. 스타일 코드는 우리가 알고 있는 css와 동일합니다.
      width: 100px;
      height: 100px;
      border: 1px solid red;
      margin: 20px;
    `;
    
    const App = () => {
    	// 그리고 우리가 만든 styled-components를 JSX에서 html 태그를 사용하듯이 사용합니다.
      return <StBox>박스</StBox>;
    };
    
    export default App;

 

 

- 조건부 스타일링의 예시   (아래는 props를 내려주는 방식을 사용해 스타일링)

    // src/App.js
    
    import React from "react";
    import styled from "styled-components";
    
    // 1. styled-components를 만들었습니다.
    const StBox = styled.div`
      width: 100px;
      height: 100px;
      border: 1px solid ${(props) => props.borderColor}; 
      // 4.부모 컴포넌트에서 보낸 props를 받아 사용합니다. 
      margin: 20px;
    `;
    
    const App = () => {
      return (
        <div>
    			{/* 2. 그리고 위에서 만든 styled-components를 사용했습니다. */}
    			{/* 3. 그리고 props를 통해 borderColor라는 값을 전달했습니다. */}
          <StBox borderColor="red">빨간 박스</StBox>
          <StBox borderColor="green">초록 박스</StBox>
          <StBox borderColor="blue">파랑 박스</StBox>
        </div>
      );
    };
    
    export default App;

 

 

- 또한, 해당 컴포넌트내에서만 활용되는 것이 아님.  전역스타일링(GlobalStyles)을 통해서 프로젝트 아우르는 공통 스타일을 적용 가능.

아래처럼 body 태그 안에는 모두 공통css을 적용하도록 함

    import { createGlobalStyle } from "styled-components";
    
    const GlobalStyle = createGlobalStyle` // styled-components 에서 제공하는 api
      body {
        font-family: "Helvetica", "Arial", sans-serif;
        line-height: 1.5;
      }
    `;
    
    export default GlobalStyle;
SMALL

'✍️ Today what I Learned _TIL' 카테고리의 다른 글

[React] React Vite 프로젝트를 vercel 통해 배포 시 (폴더내부) 이미지 안 뜨는 현상 (=> 웹 url주소 이미지로 대체)  (0) 2024.02.06
[개인 Project] styled components 방식으로 스타일링 하고 컴포넌트 재분리  (1) 2024.02.02
[개인 Project] My To-Do List -React페이지 보완하기 (추가,삭제,완료버튼+날짜입력 및 오름차/내림차순 정렬 과제하기)  (0) 2024.01.29
[Algorithm_JS] 정수 내림차순으로 배치하기  (2) 2024.01.28
[Algorithm_JS] 프로그래머스 문제풀이 : 정수 제곱근 판별  (1) 2024.01.26
'✍️ Today what I Learned _TIL' 카테고리의 다른 글
  • [React] React Vite 프로젝트를 vercel 통해 배포 시 (폴더내부) 이미지 안 뜨는 현상 (=> 웹 url주소 이미지로 대체)
  • [개인 Project] styled components 방식으로 스타일링 하고 컴포넌트 재분리
  • [개인 Project] My To-Do List -React페이지 보완하기 (추가,삭제,완료버튼+날짜입력 및 오름차/내림차순 정렬 과제하기)
  • [Algorithm_JS] 정수 내림차순으로 배치하기
련디
련디
FE - 개발 공부의 기록
  • 련디
    Ryeon's Devstory
    련디
  • 전체
    오늘
    어제
    • 분류 전체보기 (69)
      • 🪴 JavaScript & TypeScript (11)
        • 🧩 Algorithm (6)
      • 🪴 React (12)
      • 🪴 Next.js (8)
      • 🪴 HTML & CSS (2)
      • 🪴 DB & BaaS (5)
      • 🪴 Git &Github (0)
      • ✍️ 프로젝트 과정 & 회고 (18)
      • ✍️ Today what I Learned _T.. (11)
      • 🕊️ IT 아티클 (0)
      • etc. (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • My Github 😺
    • 네이버 블로그 🎵🎧 (일상,음악 등)
  • 공지사항

  • 인기 글

  • 태그

    Array.filter
    Next.js
    컴포넌트분리
    useEffect
    Vite
    타입스크립트
    props
    티스토리블로그스킨
    reacthook
    비동기통신
    reactquery
    fetch
    티스토리챌린지
    BAAS
    Supabase
    axios
    렌더링패턴
    react
    오블완
    NVM
    에러
    State
    웹개발 기초
    route handler
    리액트쿼리
    의존성배열
    tailwind
    배열 메서드
    useMutation
    json-server
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
련디
[React] "styled-components" 패키지로 CSS in JS 방식의 스타일 부여하기
상단으로

티스토리툴바