コンテンツへスキップ
NotroTail

コンポーネントをカスタマイズする

classMap で Tailwind クラスを上書きする方法と、components prop で Astro コンポーネントを差し替える方法を解説します。

notro-tail には2種類のカスタマイズ方法があります。スタイルだけ変えたいなら classMap、コンポーネントごと差し替えたいなら components prop を使います。

classMap でクラスを追加する

classMap はデフォルトコンポーネントを置き換えずに Tailwind クラスを注入できます。

<NotionMarkdownRenderer
  markdown={markdown}
  classMap={{
    callout: 'border-l-4 border-blue-400',
    h2: 'text-2xl font-bold mt-8 mb-4',
    code: 'text-sm',
  }}
/>

利用可能なキーは ClassMapKeys 型として定義されています(notro パッケージの型定義を参照)。

components で差し替える

コンポーネントごと完全に置き換えたい場合は components prop を使います。


---
import { NotionMarkdownRenderer } from 'notro';
import MyCallout from '../components/MyCallout.astro';

---

<NotionMarkdownRenderer
  markdown={markdown}
  components={{ callout: MyCallout }}
/>

カスタムコンポーネントは元の Astro コンポーネントと同じ props を受け取ります。


---
// MyCallout.astro
interface Props {
  icon?: string;
  color?: string;
  class?: string;
}
const { icon, color, class: className } = Astro.props;

---

<div class:list={['my-callout', className]}>
  {icon && <span>{icon}</span>}
  <div><slot /></div>
</div>

bodyClass でページ別テーマを適用する

特定のページだけ見た目を変えたい場合は、Layout コンポーネントの bodyClass prop を使います。 global.css にスコープ付きスタイルを追加します。

.page-about .nt-markdown-content h2 {
  @apply border-l-4 pl-3 border-blue-400;
}

Notion 固定ページの場合は config.tsnavPagesbodyClass を指定します。