๐š†๐šŽ๐š‹/๐™ฒ๐š‚๐š‚

[SCSS] IBM Carbon Design System React ์„ค์ •

ํ•ด๋ฒ„๋‹ˆ 2024. 4. 1. 16:30
๋ฐ˜์‘ํ˜•

 

https://carbondesignsystem.com/developing/react-tutorial/overview

 

Carbon Design System

Carbon is IBM’s open source design system for products and digital experiences. With the IBM Design Language as its foundation, the system consists of working code, design tools and resources, human interface guidelines, and a vibrant community of contri

carbondesignsystem.com

 

 

Carbon์ด๋ž€?

Carbon์€ IBM์˜ ๋””์ง€ํ„ธ ์ œํ’ˆ ๋ฐ ๊ฒฝํ—˜์„ ์œ„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋””์ž์ธ ์‹œ์Šคํ…œ์ด๋‹ค.

์ด ์‹œ์Šคํ…œ์€ ๋””์ง€ํ„ธ ์ œํ’ˆ ๋ฐ ๊ฒฝํ—˜์„ ๊ฐœ๋ฐœํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ์ž์›๊ณผ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋””์ž์ด๋„ˆ์™€ ๊ฐœ๋ฐœ์ž๋“ค์€ ์ผ๊ด€๋œ ๋””์ž์ธ ์›์น™์„ ์ค€์ˆ˜ํ•˜๊ณ , ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ, ์ œํ’ˆ์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ Carbon์€ IBM Design Language๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ ๋””์ž์ธ์˜ ์ผ๊ด€์„ฑ๊ณผ ํ’ˆ์งˆ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

 
 
 
 
 
Carbon์˜ ๊ธฐ๋ณธ ์›์น™
 
 
1๏ธโƒฃ Open
Carbon์€ ์˜คํ”ˆ ์†Œ์Šค์ด๋‹ค.
Carbon์˜ ์‚ฌ์šฉ์ž๋Š” ๋™์‹œ์— ๊ทธ ์ œ์ž‘์ž์ด๊ธฐ๋„ ํ•˜๋ฉฐ, ๋ˆ„๊ตฌ๋‚˜ ๊ธฐ์—ฌํ•  ๊ฒƒ์„ ๊ถŒ์žฅ๋ฐ›๋Š”๋‹ค. 

 

2๏ธโƒฃ Modular

Carbon์€ ๋ชจ๋“ˆํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Carbon์˜ ๋ชจ๋“ˆํ™”๋Š” ์‹คํ–‰์—์„œ ์ตœ๋Œ€์˜ ์œ ์—ฐ์„ฑ์„ ๋ณด์žฅํ•œ๋‹ค.

์นด๋ณธ์˜ ๊ตฌ์„ฑ์š”์†Œ๋Š” ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์— ๋งž๋Š” ์–ด๋–ค ์กฐํ•ฉ์œผ๋กœ๋„ ์›ํ™œํ•˜๊ฒŒ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 

3๏ธโƒฃ Consistent

Carbon์€ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•œ๋‹ค.

ํฌ๊ด„์ ์ธ IBM ๋””์ž์ธ ์–ธ์–ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ, ์นด๋ณธ์˜ ๋ชจ๋“  ์š”์†Œ์™€ ๊ตฌ์„ฑ์š”์†Œ๋Š” ์ผ๊ด€๋˜๊ณ  ์‘์ง‘๋ ฅ ์žˆ๋Š” ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ฒ˜์Œ๋ถ€ํ„ฐ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ๋‹ค.

 

 

 

 

 


 

 

React์— ์ ์šฉํ•ด๋ณด๊ธฐ

 

https://carbondesignsystem.com/developing/react-tutorial/step-1#fork-clone-and-branch

 

Carbon Design System

Carbon is IBM’s open source design system for products and digital experiences. With the IBM Design Language as its foundation, the system consists of working code, design tools and resources, human interface guidelines, and a vibrant community of contri

carbondesignsystem.com

 

 

 

 

์„ค์น˜

carbon ์„ค์น˜ 

yarn add @carbon/react@1.33.0
# ํ˜น์€
npm install @carbon/react@1.33.0

 

 

 

sass ์„ค์น˜

yarn add sass@1.63.6
# ํ˜น์€ 
npm install sass@1.63.6

 

Carbon์€ ์Šคํƒ€์ผ์ด Sass๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Sass ๋นŒ๋“œ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค. 

 

 

 

 

 

 

 

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์œผ๋‹ˆ ์‚ฌ์šฉํ•ด๋ณด์ž.

์ฝ”๋“œ ์ž‘์„ฑ

scss ์ฝ”๋“œ

AppTest.scss

// ์›ํ•˜๋Š” ๋ฒ„ํŠผ ์ƒ‰์ƒ ๋ณ€์ˆ˜ ์ •์˜
$myButtonColor: blue;

// Button ์ปดํฌ๋„ŒํŠธ์— ์Šคํƒ€์ผ ์ ์šฉ
.MyButton {
  background-color: $myButtonColor;
  color: white;
  border: none;
  padding: 10px 20px;
  border-radius: 5px;
  cursor: pointer;
}

// Button ์ปดํฌ๋„ŒํŠธ์— ํ˜ธ๋ฒ„ ํšจ๊ณผ ์ ์šฉ
.MyButton:hover {
  background-color: darken($myButtonColor, 10%);
}

 

 

 

 

 

Javascript ์ฝ”๋“œ 

App.js 

import './App.css';
import './style/AppTest.scss';
import { Button } from '@carbon/react';

function App() {
  return (
    <div>
      <Button className="MyButton">button</Button>
    </div>
  );
}

export default App;

 

 

 

 

์œ„ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ ๋ณด์ธ๋‹ค. 

 

๋ถ€ํŠธ์ŠคํŠธ๋žฉ์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฒ„ํŠผ ๋ชจ์–‘์ด ์žˆ์„ ์ค„ ์•Œ์•˜๋‹ค. 

(EX. btn-primary ํ•˜๋ฉด ๊ธฐ๋ณธ ๋ฒ„ํŠผ ๋ชจ์–‘์ด ์žกํžˆ๋Š” ๊ฒƒ)

ํ•˜์ง€๋งŒ carbon์—๋Š” ๊ธฐ๋ณธ ๋””์ž์ธ ๋ชจ์–‘์€ ์—†๋Š” ๊ฒƒ ๊ฐ™๊ณ , ์ง์ ‘ ๋””์ž์ธ ์„ค์ •์„ ํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค. 

 

 

 

 

 

 

 

์ „์—ญ scss ์„ค์ •ํ•˜๊ธฐ 

๋งŽ์ด ์“ฐ์ด๋Š” ์ฝ”๋“œ๋ฅผ ์ „์—ญ scss ํŒŒ์ผ์— ๋ชจ์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

ํŒŒ์ผ ์ด๋ฆ„์€ global.scss๋ผ๊ณ  ํ•˜๊ฒ ๋‹ค.

 

 

src/app/globals.scss

@use '@carbon/react';

์ฒซ ์ค„์— ์œ„์™€ ๊ฐ™์ด ์ ์–ด์ค€๋‹ค. 

 

 

 

์˜ˆ๋ฅผ ๋“ค์–ด

src/components/TutorialHeader
โ”œโ”€โ”€_tutorial-header.scss
โ””โ”€โ”€TutorialHeader.js

ํด๋” ๊ตฌ์กฐ๊ฐ€ ์ด๋ ‡๊ฒŒ ๋˜์–ด ์žˆ๋‹ค๋ฉด,

 

 

 

src/app/globals.scss ํŒŒ์ผ ์œ—์ชฝ์— ์œ„ ๋ฌธ์žฅ์„ ์จ์ค€๋‹ค. 

@use '@carbon/react';
@use '@/components/TutorialHeader/tutorial-header';

 

 

 

๊ทธ๋ฆฌ๊ณ  js์—์„  tutorial-header.scss๋งŒ importํ•˜๋ฉด ๋˜๊ณ ,

global.scss๋Š” import ํ•ด์˜ค์ง€ ์•Š์•„๋„ ๋œ๋‹ค. 

 

 

 

TutorialHeader.js

import React from 'react';
import '@carbon/icons/css/16/fill.css'; // Carbon ์•„์ด์ฝ˜ ์Šคํƒ€์ผ import
import '@/components/TutorialHeader/tutorial-header.scss'; // ํ—ค๋” ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ import

function TutorialHeader() {
  return (
    <div className="tutorial-header">
      <h1>Welcome to the Tutorial</h1>
      <p>This is a tutorial header component.</p>
    </div>
  );
}

export default TutorialHeader;

 

 

 

 

 


 

 

CSS ์™€ SCSS ์ฐจ์ด

 

CSS

'.css' ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ ์ผ๋ฐ˜์ ์ธ CSS ํŒŒ์ผ

๊ธฐ๋ณธ์ ์œผ๋กœ ์Šคํƒ€์ผ์„ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

๋ณ€์ˆ˜, mixin, nesting, ์ƒ์† ๋“ฑ์˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

 

SCSS

'scss' ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง„ SCSS(Sassy CSS)ํŒŒ์ผ์ด๋‹ค. 

CSS์˜ ํ™•์žฅ์œผ๋กœ CSS ๋ฌธ๋ฒ•์„ ํ™•์žฅํ•˜์—ฌ ๋” ํ’๋ถ€ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. 

๋ณ€์ˆ˜, mxin, nesting, ์ƒ์† ๋“ฑ๊ณผ ๊ฐ™์€ CSS ์ „์ฒ˜๋ฆฌ๊ธฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

CSS ์ž‘์„ฑ์ด ๋” ํšจ์œจ์ ์ด๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค. 

 

→ '.scss' ํŒŒ์ผ์ด '.css' ํŒŒ์ผ๋ณด๋‹ค ๋” ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ”„๋กœ์ ํŠธ์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

SCSS์˜ ์ปดํŒŒ์ผ ๊ณผ์ •

SCSS ํŒŒ์ผ ์ž‘์„ฑ → SCSS ํŒŒ์ผ์„ CSS ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ → CSS ํŒŒ์ผ ์ ์šฉ 

 

 

 

 

 

๋ฐ˜์‘ํ˜•