[OSCCA] 3. devUP UI : ์ฝ”๋“œ๋ธ”๋ก ๋ผ์ดํŠธ๋ชจ๋“œ CSS ๋ฏธ์ ์šฉ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ

2025. 11. 8. 19:45ยท๐Ÿงก Projects/๐Ÿงก OSCCA ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ
728x90

๐Ÿ‘‰ PR ๋ฐ”๋กœ๊ฐ€๊ธฐ ๐Ÿ‘ˆ

 

Fix Table Component Scroll & Light Mode Color Issues by arty0928 · Pull Request #461 · dev-five-git/devup-ui

Resolves #460 Problem 1: Table not horizontally scrollable on mobile devices The props table in component documentation pages was not horizontally scrollable on mobile devices, causing content to...

github.com

 

๋“ค์–ด๊ฐ€๋ฉฐ

์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ OSCCA ์— 'devupUI : zero-runtime Css-in-JS Libray'์— ์ฐธ์—ฌํ•˜๋ฉฐ Toggle ์ปดํฌ๋„ŒํŠธ ๋ฌธ์„œํ™”์— ๋„์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ๊ณผ์ •์—์„œ ๊ธฐ์กด ์œ ์ผํ•˜๊ฒŒ ์ž‘์„ฑ๋˜์–ด ์žˆ๋˜ button ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•˜๋˜ ์ค‘, button ์ปดํฌ๋„ŒํŠธ ๋ฌธ์„œ์—์„œ ๋งˆํฌ๋‹ค์šด ๋ฌธ๋ฒ•์ด ๊นจ์ง€๋Š” ํ˜„์ƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘‰ ์ด์ „ ๊ธ€ ๋ณด๊ณ  ๋ฐฐ๊ฒฝ ์ดํ•ดํ•˜๊ธฐ ๐Ÿ‘ˆ ์•ž์„  ํฌ์ŠคํŒ…์—์„œ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ , Table ๋ฐ˜์‘ํ˜• ์ขŒ์šฐ ์Šคํฌ๋กค ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๊ณ , ์ด๋ฒˆ์—๋Š” '๋ผ์ดํŠธ๋ชจ๋“œ CSS ๋ฏธ์ ์šฉ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ' ๋ฅผ ์ •๋ฆฌํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

๋ฌธ์ œ ์ƒํ™ฉ : ํ…Œ์ด๋ธ” ์ปดํฌ๋„ŒํŠธ์˜ ``๋กœ ๊ฐ์‹ผ ์ฝ”๋“œ ๋ธ”๋ก ๋ผ์ดํŠธ๋ชจ๋“œ์—์„œ ์•ˆ ๋ณด์ž„

`` ๋ฐฑํ‹ฑ์œผ๋กœ ๊ฐ์‹ผ ์ฝ”๋“œ๊ฐ€ ๋‹คํฌ๋ชจ๋“œ์—์„œ๋Š” ์•ฝ๊ฐ„ ํ•˜์–—๊ฒŒ(?) ์ž˜ ๋ณด์ด์ง€๋งŒ, ๋ผ์ดํŠธ๋ชจ๋“œ์—์„œ๋Š” ์•„์˜ˆ ๊ตฌ๋ถ„์ด ๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ผ์ดํŠธ ๋ชจ๋“œ ๋‹คํฌ ๋ชจ๋“œ

 

๊ทธ๋ž˜์„œ ๊ธฐ์กด PropsTable ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

์›์ธ : PropsTable์—์„œ ์ฝ”๋“œ ๋ธ”๋ก์„ CustomCodeBlock์„ ์‚ฌ์šฉํ•˜์—ฌ ``์˜ ์Šคํƒ€์ผ๋ง์ด ์ œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ

const MdxComponentsWithCodeBlock = ({ children }: { children?: string }) => {
  return (
    <Markdown
      components={{
        ...(_components as any),
        code: CustomCodeBlock,
      }}
    >
      {children}
    </Markdown>
  )
}

 

๊ทธ ์ค‘์—์„œ CodeBlock ๋ถ€๋ถ„์ธ CustomCodeBlock์„ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

CustomCodeBlock

import { Box, Text } from '@devup-ui/react'

export function CustomCodeBlock({ children }: { children: string }) {
  return (
    <Box
      as="code"
      bg="$containerBackground"
      borderRadius="0.25rem"
      color="$text"
      padding="0.25rem"
      whiteSpace="pre-wrap"
    >
      {children.split('<br>').map((line, index) => (
        <Text key={index.toString()} whiteSpace="pre">
          {index > 0 && <br />}
          {line}
        </Text>
      ))}
    </Box>
  )
}

 

CustomCodeBlock ์—์„œ bg="$containerBackground"์™€ color="$text"๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ,

์˜์‹ฌ๊ฐ€๋Š” ์›์ธ

  1. ์ด CSS ๋ณ€์ˆ˜๋“ค์ด ๋ผ์ดํŠธ๋ชจ๋“œ์—์„œ ์ œ๋Œ€๋กœ ์ •์˜๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜
  2. ์ƒ‰์ด ๋ˆˆ์—๋„๋Š” ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ

์œผ๋กœ ์˜ˆ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

1. CSS ๋ณ€์ˆ˜๊ฐ€ ์ •์˜๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ

์šฐ์„  $containerBackground ๋ณ€์ˆ˜ ๋ถ€๋ถ„์„์ถ”์ ํ–ˆ์Šต๋‹ˆ๋‹ค.

<Card
      className={css({
        _active: {
          transform: 'none',
        },
        _hover: {
          boxShadow: 'none',
        },
        borderRadius: '10px',
        border: '1px solid $border',
        bg: '$containerBackground',
        maxW: '100%',
        flexShrink: 0,
        cursor: 'default',
        mb: '20px',
        _lastChild: {
          mb: '0',
        },
        typography: 'bodyReg',
        color: '$text',
        whiteSpace: 'pre-wrap',
      })}
    >

 

๋™์ผํ•œ ํŽ˜์ด์ง€ ๋‚ด์—์„œ Button ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” Card์— ์ ์šฉ๋œ bg ์ปฌ๋Ÿฌ์—๋Š” ๋‹คํฌ๋ชจ๋“œ, ๋ผ์ดํŠธ๋ชจ๋“œ ์ ์šฉํ–ˆ์„ ๋•Œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์ปฌ๋Ÿฌ๋Š” ์ž˜ ์ ์šฉ๋˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ ๋‹ค์Œ $text๋„ ์ •์˜๋Š” ๋˜์–ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ CSS ๋ณ€์ˆ˜ ๋ฏธ์ •์˜๋Š” ์•„๋‹ˆ๊ณ , ๋‚จ์€ ์˜์‹ฌ์€ ๊ฐ ์ƒ‰์ด ๋ˆˆ์— ๋„๊ฒŒ ๋Œ€๋น„๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‚˜? ํ•ด์„œ

ํ…Œ๋งˆ ๋ณ€์ˆ˜ ์ •์˜๊ฐ€ ์–ด๋””์—์„œ ๋˜์—ˆ๋Š”์ง€ ์œ„์น˜๋กœ ๊ฐ€์„œ ํ™•์ธํ•ด๋ณด๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

2. ํ…Œ๋งˆ ํŒŒ์ผ ์ฐพ๊ธฐ 

find . -name "theme.*" -o -name "tokens.*" -o -name "colors.*"

 

๊ทธ๋ž˜์„œ ์ฐพ์€ ./apps/landing/df/theme.d.ts ํŒŒ์ผ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์กฐ๊ธˆ ๋” ๋”ฐ๋ผ๊ฐ€๋‹ค ๋ณด๋‹ˆ devup.json ํŒŒ์ผ์—์„œ theme ๋ณ„๋กœ ๋ผ์ดํŠธ ๋ชจ๋“œ, ๋‹คํฌ ๋ชจ๋“œ ์ƒ‰์ƒ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ containerBackgroundColor์˜ ์ƒ‰์„ ์กฐ๊ธˆ ๋” ์ง„ํ•˜๊ฒŒ ํ•ด์„œ text ์˜ ์ƒ‰์ƒ๊ณผ ๋Œ€๋น„๋˜๊ฒŒ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.

{
  "theme": {
    "colors": {
      "light": {
        "primary": "#5A44FF",
        "secondary": "#85A5F2",
        "link": "#006BFF",
        "text": "#2F2F2F",
        "background": "#FFF",
        "containerBackground": "#F0F505",
...
      },
      "dark": {
        "primary": "#9086FF",
        "secondary": "#2A4586",
        "link": "#006BFF",
        "text": "#EDEDED",
        "background": "#131313",
        "containerBackground": "#373639",
....
      }
    },

 

๊ทธ๋Ÿฐ๋ฐ ๋ฐ”๊ฟ”๋ณด๋‹ˆ ํ˜„์žฌ containerBackground ์ƒ‰ ์ž์ฒด๋ฅผ ๋ฐ”๊พธ๊ธฐ์—๋Š” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์ด๋ฏธ ๋งŽ์ด ์‚ฌ์šฉ ์ค‘์ด๊ธฐ์—, codeBackGround๋ผ๋Š” ์ƒ‰์ƒ์„ ์ƒˆ๋กญ๊ฒŒ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ตœ์ข… ์ฝ”๋“œ

{
  "theme": {
    "colors": {
      "light": {
        "primary": "#5A44FF",
        "secondary": "#85A5F2",
        "link": "#006BFF",
        "text": "#2F2F2F",
        "background": "#FFF",
        "containerBackground": "#FFF",
        "codeBackground": "#F5F5F5", //์ถ”๊ฐ€
 
      },
      "dark": {
        "primary": "#9086FF",
        "secondary": "#2A4586",
        "link": "#006BFF",
        "text": "#EDEDED",
        "background": "#131313",
        "containerBackground": "#373639",
        "codeBackground": "#2E2E2E", //์ถ”๊ฐ€
      }
    },

 

์ตœ์ข… ๊ฒฐ๊ณผ

์ด์ œ ๋ผ์ดํŠธ๋ชจ๋“œ์—์„œ๋„ ์ฝ”๋“œ ๋ธ”๋ก CSS ๊ฐ€ ๋ˆˆ์— ๋„๊ฒŒ ์ž˜ ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ผ์ดํŠธ ๋ชจ๋“œ ๋‹คํฌ ๋ชจ๋“œ
728x90
'๐Ÿงก Projects/๐Ÿงก OSCCA ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [OSCCA] 4. devUP UI : MDX ์ฝ”๋“œ ๋ธ”๋ก์ด ๋ชจ๋ฐ”์ผ์—์„œ ๋„˜์น  ๋•Œ, ๋ฐ˜์‘ํ˜• ๊ทธ๋ฆฌ๋“œ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ
  • [OSCCA] 2. devUP UI : Table ์ปดํฌ๋„ŒํŠธ ์ขŒ์šฐ ์Šคํฌ๋กค ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ
eyes from es
eyes from es
  • eyes from es
    eyes from es
    eyes from es
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
      • โค๏ธ ๊ฟ€ํŒ ๋ชจ์Œ
        • โค๏ธ ๊ฐ“์ƒ ๊ฟ€ํŒ
        • โค๏ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ
      • ๐Ÿงก Projects
        • ๐Ÿงก Projects: Web
        • ๐ŸŽคPreterview
        • ๐Ÿงก Projects: App
        • ๐Ÿงก๋Œ€์™ธํ™œ๋™
        • ๐Ÿงก OSCCA ์˜คํ”ˆ์†Œ์Šค ์ปจํŠธ๋ฆฌ๋ทฐ์…˜ ์•„์นด๋ฐ๋ฏธ
      • ๐Ÿ’› Frontend
        • ๐Ÿ’› Frontend : React
        • ๐Ÿ’› Frontend : JavaScript
        • ๐Ÿ’› Frontend : TypeScript
      • ๐Ÿ’š Backend
      • ๐Ÿ’™ OS: ์šด์˜์ฒด์ œ
        • ๐Ÿ’™ Linux
      • ๐Ÿ’œ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
        • ๐Ÿ’œ ์ž๋ฃŒ๊ตฌ์กฐ
        • ๐Ÿ’œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
        • ๐Ÿ’œ ๋ฐฑ์ค€
        • ๐Ÿ’œSWEA
        • ๐Ÿ’œํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
      • ๐Ÿ”ด Study
        • ๐Ÿ”ด๋ฉด์ ‘ ์Šคํ„ฐ๋””
        • ๐Ÿ”ด ๊ธฐ์—…๋ถ„์„
        • ๐Ÿ”ด ์—๋Ÿฌ๋…ธํŠธ(Error Note)๐Ÿงฑ
        • ๐Ÿ”ด ITNews(Coding)
        • ๐Ÿ”ด ITNews(Tech)
      • ๐ŸŸ  ์ธ์ƒ ๊ณ„ํš
        • ๐ŸŸ  ์˜ฌํ•ด ๋ชฉํ‘œ
      • ๐ŸŸก TIL
        • ๐ŸŸก TIL ์ผ๊ธฐ
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    Ai
    ๋ฌธ์ œํ’€์ด
    ์Šค๋งˆํŠธ์‹ฑ์Šค
    ๊ธฐ์—…๋ถ„์„
    ๋ถ„์„๋ ˆํฌํŠธ
    ์Šคํ„ฐ๋””
    ์ŠคํŒŒ๋ฅดํƒ€์ฝ”๋”ฉํด๋Ÿฝ
    ๊ฐœ๋ฐœ
    ๋„ค์นด๋ผ์ฟ ๋ฐฐ
    IT์ด์Šˆ
    html
    ๋™ํ–ฅ๋ถ„์„
    ๋‰ด์Šค๋ฃธ
    ์ฝ”๋”ฉ
    ์ž๋ฃŒ๊ตฌ์กฐ
    C
    ๋ฐฉํ•™์Šคํ„ฐ๋””
    ๊ฐœ๋ฐœ๊ณต๋ถ€
    ์ฝ”๋”ฉํ…Œ์ŠคํŠธ
    ์‚ผ์„ฑ์ „์ž
    ์ฝ”๋“œ๋ฆฌ๋ทฐ
    ์ฝ”๋“œ์Šคํ„ฐ๋””
    SW์ด์Šˆ
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ๋‰ด์Šค์Šคํฌ๋žฉ
    ์ฝ”ํ…Œ
    ๋ฐฑ์ค€
    ์ตœ๊ทผ์ด์Šˆ
    css
    ์›น๊ฐœ๋ฐœ
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
eyes from es
[OSCCA] 3. devUP UI : ์ฝ”๋“œ๋ธ”๋ก ๋ผ์ดํŠธ๋ชจ๋“œ CSS ๋ฏธ์ ์šฉ ๋ฌธ์ œ ํ•ด๊ฒฐ๊ธฐ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”