Styling
Styling
Radix Primitives는 스타일이 없고(unstyled) 어떤 스타일링 솔루션이든 호환되므로, 스타일링을 완전히 제어할 수 있어요.
출처: 문서
본문
Radix Primitives 자체는 스타일을 거의 포함하지 않아서, CSS·CSS-in-JS 등 원하는 어떤 방식으로든 자유롭게 스타일링할 수 있어요. 상태는 data-state 속성으로 노출되어 상태별 스타일을 쉽게 줄 수 있어요.
스타일링 개요
기능적 스타일
기능적 스타일을 포함한 모든 스타일링 측면을 여러분이 제어해요. 예를 들어 기본적으로 Dialog Overlay는 전체 뷰포트를 덮지 않아요. 그 스타일과 프레젠테이션 스타일을 추가하는 것은 여러분의 몫이에요.
클래스
모든 컴포넌트와 파트는 className prop을 받아요. 이 클래스는 DOM 요소로 전달되고 CSS에서 예상대로 사용할 수 있어요.
데이터 속성
컴포넌트가 상태ful하면 상태가 data-state 속성으로 노출돼요. 예를 들어 Accordion Item이 열리면 data-state="open" 속성을 포함해요.
CSS로 스타일링
파트 스타일링
제공한 className을 타겟팅해 컴포넌트 파트를 스타일링할 수 있어요.
import * as React from "react";
import { Accordion } from "radix-ui";
import "./styles.css";
export const AccordionDemo = () => (
<Accordion.Root>
<Accordion.Item className="AccordionItem" value="item-1" />
{/* … */}
</Accordion.Root>
);
상태 스타일링
data-state 속성을 타겟팅해 컴포넌트 상태를 스타일링할 수 있어요.
.AccordionItem {
border-bottom: 1px solid gainsboro;
}
.AccordionItem[data-state="open"] {
border-bottom-width: 2px;
}
CSS-in-JS로 스타일링
아래 예시는 styled-components를 사용하지만, 원하는 어떤 CSS-in-JS 라이브러리를 사용해도 돼요.
파트 스타일링
대부분의 CSS-in-JS 라이브러리는 컴포넌트와 스타일을 전달하는 함수를 내보내요. Radix primitive 컴포넌트를 직접 제공할 수 있어요.
import * as React from "react";
import { Accordion } from "radix-ui";
import styled from "styled-components";
const StyledItem = styled(Accordion.Item)`
border-bottom: 1px solid gainsboro;
`;
export const AccordionDemo = () => (
<Accordion.Root>
<StyledItem value="item-1" />
{/* … */}
</Accordion.Root>
);
상태 스타일링
data-state 속성을 타겟팅해 컴포넌트 상태를 스타일링할 수 있어요.
import { Accordion } from "radix-ui";
import styled from "styled-components";
const StyledItem = styled(Accordion.Item)`
border-bottom: 1px solid gainsboro;
&[data-state="open"] {
border-bottom-width: 2px;
}
`;
primitive 확장하기
primitive를 확장하는 것은 일반 React 컴포넌트를 확장하는 것과 동일해요.
import * as React from "react";
import { Accordion as AccordionPrimitive } from "radix-ui";
const AccordionItem = React.forwardRef<
React.ElementRef<typeof AccordionPrimitive.Item>,
React.ComponentPropsWithoutRef<typeof AccordionPrimitive.Item>
>((props, forwardedRef) => <AccordionPrimitive.Item {...props} ref={forwardedRef} />);
AccordionItem.displayName = "AccordionItem";
요약
Radix Primitives는 접근성 문제와 기타 복잡한 기능을 캡슐화하면서, 스타일링은 완전히 제어할 수 있도록 설계되었어요.
편의를 위해 상태ful 컴포넌트는 data-state 속성을 포함해요.
더 알아보기 (Learn more)
- 스타일이 없는 부품이라 CSS/CSS-in-JS/어떤 솔루션이든 자유롭게 사용할 수 있어요.
- 상태ful 컴포넌트는
data-state(예:data-state="open") 속성으로 상태를 노출해 상태별 스타일링을 쉽게 해 줘요.