> Frontend/React

TIL-2024.05.01 - React - 007. CSS-Module & Styled Component

Janku 2024. 5. 2. 00:32

 

 

 

 

질문

1. React에서 CSS를 맥이는 방법이 뭐가 있을까? 

2. CSS-in JS가 뭐야? 

 

 

CSS-Module

- CSS Modules는 CSS 파일을 모듈로 취급하여 클래스 이름을 고유하게 만들어주는 기술

- 각각의 클래스는 로컬 범위를 가지고 있어서, 전역 스코프에 영향을 받지 않으므로 클래스 이름 충돌 문제를 해결 가능.

 

 

예제

import React from 'react';
import styles from "../../assets/styling/3-css-module/CSSModule.module.css";

/*
* CSS MODULE 은 CSS를 불러와서 사용할 때 클래스 이름을 고유한 값으로 설정
* [파일 이름]_[쿨래스 이름]_[해시값] 형태로 자동으로 만들어서 컴포넌트 스타일 클래스 이름이 중첩되는 현상을 방지
* */

const CSSModule = () => {
    return (
        <div className={`${styles.wrapper} ${styles.inverted}`}>
            안녕하세요 저는
            <span className="something">CSS MODULE !</span>
        </div>
    );
};

export default CSSModule;

 

 

 

// CSS

.wrapper {
    background: black;
    padding: 1rem;
    color: white;
    font-size: 2rem;
}

.inverted {
    color: black;
    background: white;
    border: 1px solid black;
}

/* 글로벌 CSS 를 작성하고 싶다면 */
:global .something {
    font-weight: 800;
    color: aqua;
}

 

 

 

Style Component

- JavaScript 파일 내에서 CSS를 작성하는 방식으로, 컴포넌트와 스타일을 강력하게 결합. 

- 이를 통해 컴포넌트 단위로 스타일을 관리하고, 스타일이 컴포넌트와 함께 캡슐화되어 개발자들이 보다 체계적으로 코드를 작성

 

 

예제

import React from "react";
import styled, {css} from "styled-components";

/*
* Styled Component
* JS 파일 안에서 스타일을 선언하는 방식 (CSS-in-JS)
*/

// styled.div 및 styled.button: styled-components의 스타일 컴포넌트를 생성
const Box = styled.div`
    // props 로 넣어준 값을 직접 전달: 컴포넌트의 color 속성을 사용하여 배경색을 지정, color 속성이 지정되지 않았을 경우 기본값으로 'blue'를 사용
    background: ${props => props.color || 'blue'};
    padding: 1rem;
    display: flex;
`;

const Button = styled.button`
    background: white;
    color: black;
    border-radius: 4px;
    padding: 0.5rem;
    display: flex;
    align-items: center;
    justify-content: center;
    box-sizing: border-box;
    font-size: 1rem;
    font-weight: 600;

    // & 문자를 사용하여 Sass 처럼 자기 자신 선택 가능

    &:hover {
        background: rgba(255, 255, 255, 0.9);
    }

    ${props =>
            // 다음 코드는 inverted 값이 true 일 때 특정 스타일을 부여
            props.inverted &&
            // css 함수:  템플릿 리터럴을 사용하여 스타일을 동적으로 생성.
            css`
                background: none;
                border: 2px solid white;
                color: white;
                // &:hover: 마우스 오버 상태일 때의 스타일을 지정

                &:hover {
                    background: white;
                    color: black;
                }
            `};

    // & + button: 인접 형제 선택자를 사용하여 해당 스타일이 적용된 버튼 다음에 오는 버튼에 대해 추가적인 스타일을 지정

    & + button {
        margin-left: 1rem;
    }
`;


const StyledComponent = () => {
    return (
        <Box color="black">
            <Button>안녕하세요</Button>
            <Button inverted="true">테두리만</Button>
        </Box>
    );
};

export default StyledComponent;

 

 

 

답변

1. React에서 CSS를 맥이는 방법이 뭐가 있을까? 

- CSS-Module 혹은 Style Component로 CSS 맥일 수 있음. 

 

2. CSS-in JS가 뭐야? 

- 스타일을 정의하고 관리하는 방식을 의미.

- 스타일을 JavaScript 객체나 함수로 표현하여 사용하는 방식