๐Ÿ‘ฉโ€๐Ÿ’ป
Megaptera Frontend
  • ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
    • megaptera-front
    • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 1. ๊ฐœ๋ฐœ ํ™˜๊ฒฝ
      • 2. TypeScript
      • 3. React
      • 4. Testing Library
      • 5. Parcel & ESLint
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 2. JSX
      • 1. JSX
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 3. React๋กœ ์‚ฌ๊ณ ํ•˜๊ธฐ
      • 1. React Component
      • 2. React State
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 4. React Hooks
      • 1. Express
      • 2. Fetch API & CORS
      • 3. React์˜ Hook
      • 4. useRef & Custom Hook
      • 5. usehooks-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 5. ํ…Œ์ŠคํŠธ
      • 1. TDD
      • 2. React Testing Library
      • 3. MSW
      • 4. Playwright
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 6. External Store
      • 1. External Store
      • 2. TSyringe
      • 3. Redux ๋”ฐ๋ผํ•˜๊ธฐ
      • 4. usestore-ts
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 7. React Router
      • 1. Routing
      • 2. Routes
      • 3. Router
      • 4. Navigation
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 8. CSS in JS
      • 1. Design System
      • 2. Style Basics
      • 3. CSS in JS
      • 4. styled-components
      • 5. props์™€ attrs
      • 6. Global Style & Theme
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 9. ์‡ผํ•‘๋ชฐ ๋ชฉ๋ก, ์ƒํ’ˆ ํŽ˜์ด์ง€
      • 1. ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „ ์ค€๋น„
      • 2. ๋ชฉ๋ก ๋ณด๊ธฐ
      • 3. ์ƒํ’ˆ ์ƒ์„ธ ๋ณด๊ธฐ
      • 4. ์žฅ๋ฐ”๊ตฌ๋‹ˆ ๋ณด๊ธฐ
      • 5. ์žฅ๋ฐ”๊ตฌ๋‹ˆ์— ์ƒํ’ˆ ๋‹ด๊ธฐ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 10. ์‚ฌ์šฉ์ž ์ธ์ฆ, ์ธ๊ฐ€
      • 1. ๋กœ๊ทธ์ธ
      • 2. ๋กœ๊ทธ์•„์›ƒ
      • 3. ํšŒ์›๊ฐ€์ž…
      • 4. ์ฃผ๋ฌธ ๋ชฉ๋ก & ์ฃผ๋ฌธ ์ƒ์„ธ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 11. ์ฃผ๋ฌธ, ๊ฒฐ์ œ
      • 1. ๋ฐฐ์†ก ์ •๋ณด ์ž…๋ ฅ
      • 2. ํฌํŠธ์› ๊ฒฐ์ œ ์š”์ฒญ
      • 3. ๋ฐฐ์†ก ๋ฐ ๊ฒฐ์ œ ์ •๋ณด ์ „๋‹ฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
    • 12. ์–ด๋“œ๋ฏผ
      • 1. ๊ด€๋ฆฌ์ž ์›น ์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ ์‹œ์ž‘
      • 2. ๋กœ๊ทธ์ธ, ์‚ฌ์šฉ์ž ๋ชฉ๋ก
      • 3. ์นดํ…Œ๊ณ ๋ฆฌ ๊ด€๋ฆฌ
      • 4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ
      • 5. ์ƒํ’ˆ ๊ด€๋ฆฌ
      • ํ•œ ์ฃผ๋ฅผ ๋งˆ์น˜๋ฉฐ
Powered by GitBook
On this page
  • 1. styled-components
  • ์žฅ์ 
  • 2. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
  • ํŒจํ‚ค์ง€ ์„ค์น˜
  • .swcrc ํŒŒ์ผ ์ž‘์„ฑ
  • ๊ฐ„๋‹จํ•œ Styled Component ๋งŒ๋“ค๊ธฐ
  • ์ƒ์† ๋ฐ›์•„ ์ถ”๊ฐ€๋กœ ์Šคํƒ€์ผ ์ž…ํžˆ๊ธฐ
  • ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์— ์Šคํƒ€์ผ ์ž…ํžˆ๊ธฐ
  1. ์ฃผ์ฐจ๋ณ„ ํ•™์Šต
  2. 8. CSS in JS

4. styled-components

Previous3. CSS in JSNext5. props์™€ attrs

Last updated 2 years ago

1. styled-components

์Šคํƒ€์ผ์ด ์ ์šฉ๋œ ์ปดํฌ๋„ŒํŠธ(styled-component)๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋„๊ตฌ

๐Ÿ™‹๐Ÿปโ€โ™€๏ธ๏ธ ์ฃผ์˜ ์‚ฌํ•ญ

์œ ๋ช…ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์€ ๋Œ€๋ถ€๋ถ„ โ€˜์™œโ€™ ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ํ˜น์€ ํ’ˆ๊ณ  ์žˆ๋Š” ์ฒ ํ•™ ๋“ฑ์ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๊ณต์‹๋ฌธ์„œ๋ฅผ ๊ผญ ์‚ดํŽด๋ณด๋Š” ์Šต๊ด€์„ ๋“ค์ด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์ฐธ๊ณ  ๋ ˆํผ๋Ÿฐ์Šค

๐Ÿ“Œ ์„ค์น˜ํ•ด์„œ ์‚ฌ์šฉํ•  ๊ฒƒ - ์Šคํƒ€์ผ ์ฝ”๋“œ๋ฅผ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•ด์„œ ์•„๋ฌด๋Ÿฐ ๊ตฌ๋ถ„์ด ์•ˆ ๋˜๋Š”๋ฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ ์„ค์น˜ํ•˜๋ฉด CSS์ž„์„ ์ธ์‹ ๐Ÿ“Œ ์„ SWC์—์„œ ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํฌํŒ…ํ•œ ๊ฒƒ๋„ ํ•จ๊ป˜ ์„ค์น˜ํ•  ๊ฒƒ(SSR ์ง€์› ๋“ฑ์„ ์œ„ํ•œ ๊ณต์‹ ๊ถŒ์žฅ์‚ฌํ•ญ)

์žฅ์ 

  1. ์ž๋™ ์ค‘์š” CSS ํŽ˜์ด์ง€์— ๋ Œ๋”๋ง๋˜๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ถ”์ ํ•˜๊ณ  ํ•ด๋‹น ์Šคํƒ€์ผ๋งŒ ์ž๋™ ์ ์šฉ, ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์š”ํ•œ ์ตœ์†Œํ•œ์˜ ์ฝ”๋“œ๋ฅผ ๋กœ๋“œ

  2. ํด๋ž˜์Šค ์ด๋ฆ„ ๋ฒ„๊ทธ ์—†์Œ ๊ณ ์œ ํ•œ ํด๋ž˜์Šค ์ด๋ฆ„์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต, ๊ฒน์นจ ๋˜๋Š” ๋งž์ถค๋ฒ• ์˜ค๋ฅ˜ ๋ฐฉ์ง€

  3. ์†์‰ฌ์šด CSS ์‚ญ์ œ ์Šคํƒ€์ผ์ด ํŠน์ • ์ปดํฌ๋„ŒํŠธ์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์‚ญ์ œ๋˜๋ฉด ๋ชจ๋“  ์Šคํƒ€์ผ๋„ ํ•จ๊ป˜ ์‚ญ์ œ๋จ

  4. ๊ฐ„๋‹จํ•œ ๋™์  ์Šคํƒ€์ผ๋ง ํด๋ž˜์Šค๋ฅผ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•  ํ•„์š” ์—†์ด, props ๋˜๋Š” global theme์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํƒ€์ผ์„ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ„๋‹จํ•˜๊ณ  ์ง๊ด€์ 

  5. ์œ ์ง€ ๋ณด์ˆ˜ ์šฉ์ด ์ปดํฌ๋„ŒํŠธ์— ์˜ํ–ฅ์„ ์ฃผ๋Š” ์Šคํƒ€์ผ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ๋’ค์งˆ ํ•„์š”๊ฐ€ ์—†์Œ

  6. ์ž๋™ ๋ฒค๋” ํ”„๋ฆฌํ”ฝ์Šค CSS๋ฅผ ํ˜„์žฌ ํ‘œ์ค€์— ๋งž๊ฒŒ ์ž‘์„ฑํ•˜๊ณ , ๋‚˜๋จธ์ง€๋Š” ์Šคํƒ€์ผ ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์ฒ˜๋ฆฌ

2. ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

ํŒจํ‚ค์ง€ ์„ค์น˜

npm i styled-components

npm i -D @types/styled-components @swc/plugin-styled-components

.swcrc ํŒŒ์ผ ์ž‘์„ฑ

{
    "jsc": {
        "experimental": {
            "plugins": [
                [
                    "@swc/plugin-styled-components",
                    {
                        "displayName": true,
                        "ssr": true
                    }
                ]
            ]
        }
    }
}

๊ฐ„๋‹จํ•œ Styled Component ๋งŒ๋“ค๊ธฐ

import styled from 'styled-components';

const Paragraph = styled.p`
    color: #00F;
    
    strong {
        font-size: 2em;
    }
`;

export default function Greeting() {
    return (
        <Paragraph>
            Hello, world
            <strong>!</strong>
        </Paragraph>
    );
}
  • ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” class๋กœ ๋ณ€ํ™˜, ์ธ๋ผ์ธ ์Šคํƒ€์ผ์ด ์•„๋‹ˆ๋ผ CSS

  • ๐Ÿ’ก styled ๊ฐ€ class๋ฅผ ์ถ”๊ฐ€ํ•ด์คŒ <p class="sc-bgqQcB fSBjJp">Hello!</p> sc๋Š” styled-components ๋ฅผ ์˜๋ฏธ

  • ์ค‘์ฒฉ(nested) ์„ ์ง€์› ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์˜ ํ•˜์œ„ ํƒœ๊ทธ์—๋งŒ ์ ์šฉ๋˜๋Š” ๊ฒƒ

์ƒ์† ๋ฐ›์•„ ์ถ”๊ฐ€๋กœ ์Šคํƒ€์ผ ์ž…ํžˆ๊ธฐ

์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์†๋ฐ›์•„ ์ค‘๋ณต์„ ์ค„์ด๊ณ  ์ถ”๊ฐ€๋กœ ์Šคํƒ€์ผ๋ง

import styled from 'styled-components';

const Paragraph = styled.p`
    color: #00F;
`;

const BigParagraph = styled(Paragraph)`
    font-size: 2rem;
	
    strong {
        font-size: 1em;
    }
`;

export default function Greeting() {
    return (
        <BigParagraph>
            Hello, world!
        </BigParagraph>
    );
}
  • ์ƒ์†๋ฐ›์€ ๊ฐ’์„ ๋ฎ์–ด์“ธ ์ˆ˜ ์žˆ์Œ

๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์— ์Šคํƒ€์ผ ์ž…ํžˆ๊ธฐ

โš ๏ธ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ๊ฐ€ Class๋ฅผ ์žก์•„์ค˜์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์ฃผ์˜ styled ๊ฐ€ class๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, className์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ className์€ ์›๋ž˜ ์กด์žฌํ•˜๋Š” ์†์„ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— React.HTMLAttributes<HTMLElement> ํƒ€์ž…์œผ๋กœ ์„ค์ •ํ•˜๋ฉด ๋จ

import styled from 'styled-components';

function HelloWorld({className}: React.HTMLAttributes<HTMLElement>) {
    return (
        <p className={className}>
            Hello, world!
        </p>
    );
}

const Greeting = styled(HelloWorld)`
    color: #00F;
 `;

export default Greeting;

โœ๏ธ ์กฐ๊ฐ๊ธ€

styled๊ฐ€ ์–ด๋–ค ์—ญํ• ์„ ํ•˜๋Š”์ง€ ๋ชจ๋ฅด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ๋ธŒ๋ผ์šฐ์ €์—์„œ class๋กœ ๋ณ€ํ™˜๋˜๋„๋ก class๋ฅผ ์ƒ์„ฑํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์„ ์ฒ˜์Œ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Ÿฐ ์ด์œ ๋กœ ๊ธฐ์กด ์ปดํฌ๋„ŒํŠธ์— ์Šคํƒ€์ผ์„ ์ฃผ๋ ค๋ฉด className์„ ๋„˜๊ฒจ์ฃผ๋„๋ก ํ•ด์•ผํ•œ๋‹ค. ์ฒ˜์Œ ๊ฐ•์˜๋ฅผ ๋“ค์„ ๋•Œ๋Š” ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋๋Š”๋ฐ ๋ช‡ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ ๋“ค์œผ๋‹ˆ ๊นจ๋‹ซ๋Š” ์ˆœ๊ฐ„์ด ์™”๋‹ค.

styled-components
@swc/plugin-styled-components
styled-components basics
IDE ํ”Œ๋Ÿฌ๊ทธ์ธ
Babel Plugin
๐Ÿ”— ์‹ค์Šต ๋งํฌ