# Vanilla Extract URL: /lynx/getting-started/styling/vanilla-extract Source: https://github.com/daangn/seed-design/blob/dev/docs/content/lynx/getting-started/styling/vanilla-extract.mdx Lynx에서 Vanilla Extract로 정적 CSS를 생성하고 SEED 토큰을 사용하는 방법을 안내합니다. Vanilla Extract는 TypeScript로 작성한 스타일을 빌드 시 CSS로 추출해요. `.css.ts`에서 스타일을 정의하고, 생성된 클래스 이름을 Lynx 네이티브 엘리먼트의 `className`에 적용하세요. 정적인 스타일을 렌더링할 때마다 JavaScript에서 생성할 필요가 없어요. ## 요구사항과 설치 `rspeedy-plugin-vanilla-extract`는 Vanilla Extract의 webpack 플러그인에 Rspeedy 호환 처리를 추가해요. 이 가이드는 배포된 플러그인 **0.2.0**의 의존성 조건을 기준으로 해요. | 패키지 | 조건 | | ---------------------- | --------------------- | | `@rsbuild/core` | `1.x` | | `webpack` | `5.x` | | Rspeedy·ReactLynx 플러그인 | 위 Rsbuild 환경과 호환되는 버전 | 먼저 프로젝트에서 사용하는 Rspeedy의 Rsbuild 버전을 확인하세요. 플러그인 `0.2.0`의 peer dependency는 `@rsbuild/core: ^1`이에요. Rsbuild 2 기반 프로젝트에 `@rsbuild/core@1`을 추가로 설치하는 것만으로 호환성이 확보되지는 않아요. Rsbuild 2를 사용 중이라면 이를 지원하는 플러그인 버전을 확인하거나, [Tailwind CSS 4 가이드](/lynx/getting-started/styling/tailwind-css-4)를 참고하세요. 공통 SEED 패키지는 [Installation](/lynx/getting-started/installation)에서 설치하고, 다음 의존성을 추가하세요. - npm: npm install @vanilla-extract/css npm install -D rspeedy-plugin-vanilla-extract@0.2.0 @rsbuild/core@1 webpack@5 - pnpm: pnpm add @vanilla-extract/css pnpm add -D rspeedy-plugin-vanilla-extract@0.2.0 @rsbuild/core@1 webpack@5 - yarn: yarn add @vanilla-extract/css yarn add --dev rspeedy-plugin-vanilla-extract@0.2.0 @rsbuild/core@1 webpack@5 - bun: bun add @vanilla-extract/css bun add --dev rspeedy-plugin-vanilla-extract@0.2.0 @rsbuild/core@1 webpack@5 ## Rspeedy 설정 기존 `lynx.config.ts`의 플러그인 목록에 `pluginVanillaExtract({})`를 추가하세요. 기존 ReactLynx 플러그인과 SEED feature flags 설정은 유지해요. ```ts title="lynx.config.ts" import { defineConfig } from "@lynx-js/rspeedy"; import { pluginVanillaExtract } from "rspeedy-plugin-vanilla-extract"; export default defineConfig({ // ... 기존 설정 plugins: [ // ... 기존 플러그인 pluginVanillaExtract({}), ], }); ``` ## SEED CSS 불러오기 ```css title="src/styles/global.css" @import "@seed-design/lynx-css/base.css"; ``` ```ts title="src/index.tsx" import "./styles/global.css"; ``` 토큰의 TypeScript 참조를 import하는 것만으로 토큰 값이 선언되지는 않으므로 `base.css`도 반드시 불러오세요. Lynx에서는 웹용 `@seed-design/css` 대신 `@seed-design/lynx-css`를 사용해요. 루트 ``의 색상 모드 설정은 [Theming](/lynx/getting-started/styling/theming)을 참고하세요. ## 스타일과 SEED 토큰 사용하기 ```ts title="src/App.css.ts" import { vars } from "@seed-design/lynx-css/vars"; import { style } from "@vanilla-extract/css"; export const root = style({ display: "flex", flexDirection: "column", rowGap: vars.$dimension.x2, padding: vars.$dimension.x4, backgroundColor: vars.$color.bg.layerDefault, borderRadius: vars.$radius.r3, }); export const label = style({ color: vars.$color.fg.neutral, fontSize: vars.$fontSize.t4, lineHeight: vars.$lineHeight.t4, fontWeight: vars.$fontWeight.medium, }); ``` ```tsx title="src/App.tsx" import * as styles from "./App.css"; export function App() { return ( 첫 번째 항목 두 번째 항목 ); } ```