block-types > Callout 블록
Callout 블록
Callout 블록은 주목을 끌어야 하는 내용을 강조하는 데 사용됩니다. 주로 아이콘과 함께 색상이 있는 배경으로 표시되어 시각적으로 눈에 띄게 만듭니다.
데이터 구조
Callout 블록의 Notion API 데이터 구조는 다음과 같습니다:
{
"type": "callout",
"callout": {
"rich_text": [
{
"type": "text",
"text": {
"content": "This is a callout",
"link": null
},
"annotations": {
"bold": false,
"italic": false,
"strikethrough": false,
"underline": false,
"code": false,
"color": "default"
},
"plain_text": "This is a callout",
"href": null
}
],
"icon": {
"type": "emoji",
"emoji": "💡"
},
"color": "gray_background"
}
}
rich_text
: Callout의 텍스트 내용과 스타일 정보를 담고 있는 배열입니다.icon
: Callout과 함께 표시될 아이콘 정보입니다. 이모지나 외부 이미지 URL이 될 수 있습니다.color
: Callout의 배경색을 지정합니다.
React 컴포넌트
Notionpresso에서 Callout 블록을 렌더링하는 컴포넌트는 다음과 같습니다:
import React from "react";
import type { CalloutArgs } from "../types";
import { getColorCss } from "../utils";
import RichText from "./internal/rich-text";
import Icon from "./internal/icon";
type CalloutProps = {
children?: React.ReactNode;
} & CalloutArgs;
const Callout: React.FC<CalloutProps> = ({ children, ...props }) => {
const { callout } = props;
return (
<div
className={`notion-block notion-callout ${getColorCss(callout.color)}`}
>
<div className="notion-callout-content">
<div className="notion-callout-icon" aria-hidden="true">
<Icon icon={callout.icon} />
</div>
<div className="notion-callout-text">
<RichText props={callout.rich_text} />
</div>
</div>
{children}
</div>
);
};
export default Callout;
사용 예시
Callout 블록을 사용하는 예시는 다음과 같습니다:
import { Notion } from "@notionpresso/react";
function MyNotionPage({ blocks }) {
return (
<Notion>
<Notion.Blocks blocks={blocks} />
</Notion>
);
}
여기서 blocks
는 Notion API로부터 받아온 블록 데이터 배열입니다.
아이콘 처리
Callout 블록의 아이콘은 Icon
컴포넌트를 통해 처리됩니다. 이 컴포넌트는 이모지와 외부 이미지 URL을 모두 지원합니다. 아이콘 타입에 따라 적절한 렌더링 방식을 선택합니다.
스타일링
Callout 블록의 스타일은 다음 CSS 클래스를 통해 커스터마이즈할 수 있습니다:
.notion-block
: 모든 Notion 블록에 적용되는 기본 스타일.notion-callout
: Callout 블록 특정 스타일.notion-callout-content
: Callout 내용의 스타일.notion-callout-icon
: Callout 아이콘의 스타일.notion-callout-text
: Callout 텍스트의 스타일
추가적인 스타일링이 필요한 경우, 이 클래스들을 대상으로 CSS를 작성하면 됩니다. 예를 들어:
.notion-callout {
border-radius: 4px;
padding: 16px;
display: flex;
align-items: center;
}
.notion-callout-icon {
margin-right: 12px;
font-size: 24px;
}
.notion-callout-text {
flex: 1;
}
색상 처리
Callout의 color
속성은 배경색을 결정합니다. getColorCss
유틸리티 함수를 사용하여 적절한 CSS 클래스를 생성합니다. 이 함수는 Notion의 색상 이름을 CSS 클래스로 변환합니다.
중첩 지원
Callout 블록은 다른 블록을 포함할 수 있습니다. 이는 children
prop을 통해 처리됩니다. 예를 들어, Callout 안에 리스트나 다른 텍스트 블록을 포함할 수 있습니다.
주의사항
- Callout 블록은 주요 정보나 경고를 강조하는 데 효과적입니다. 그러나 과도한 사용은 오히려 주의를 분산시킬 수 있으므로 적절히 사용해야 합니다.
- 아이콘과 배경색의 조합이 접근성 기준을 충족하는지 확인해야 합니다. 특히 텍스트와 배경 간의 충분한 대비를 유지해야 합니다.
- 스크린 리더 사용자를 위해 아이콘에 적절한 대체 텍스트를 제공하는 것이 좋습니다.