コンポーネント CSS#
組み込み SSG は、生成 HTML の横に機能 CSS をインラインします。ssg: false、
transformAllPlugins()、ssg.render で文書を自分で持つホストは、同じ
マークアップは受け取れますが、そのスタイルは付きません。
@ox-content/vite-plugin は、SSG がすでに使っている crate のスタイルシートを
公開します。描画するものだけ import してください。サイト固有のテーマは
アプリ側に残します。
@import "@ox-content/vite-plugin/styles/core.css";
@import "@ox-content/vite-plugin/styles/markdown-tables.css";
@import "@ox-content/vite-plugin/styles/magic-links.css";
@import "@ox-content/vite-plugin/styles/social.css";
@import "@ox-content/vite-plugin/styles/twitter-full.css";
@import "@ox-content/vite-plugin/styles/reader-chrome.css";
全部まとめて取るとき:
@import "@ox-content/vite-plugin/styles/all.css";
transformAllPlugins() が返すのは今までどおり HTML だけです。CSS は明示
import なので、コンパクトな Tweet だけ載せてフルカード用シートは省略できます。
エントリポイント#
| import | 対象 |
|---|---|
styles/core.css |
ベーストークン(--octc-*)と、SSG スタイルシートの既定 prose / chrome |
styles/markdown-tables.css |
Markdown table のレスポンシブなスクロールコンテナと focus ring。prose や theme の global は含めません |
styles/magic-links.css |
{link:...} チップ |
styles/social.css |
コンパクトな Tweet/X、Bluesky、プロバイダカード、Spotify、Apple Music、audio、video、StackBlitz、WebContainer |
styles/twitter-full.css |
appearance: "full" の Tweet カード。react-tweet / sveltweet の MIT 告知を含む |
styles/reader-chrome.css |
独自ホスト向けの copy button、外部リンク icon、back-to-top controls |
styles/ogp.css |
Open Graph カード |
styles/github.css |
GitHub リポジトリ / ソースカード |
styles/youtube.css |
YouTube 埋め込み |
styles/tabs.css |
タブとパッケージマネージャタブ |
styles/mermaid.css |
Mermaid 図 |
styles/graphviz.css |
Graphviz DOT 図 |
styles/citations.css |
引用リンクと生成 bibliography section |
styles/not-by-ai.css |
<NotByAI /> 執筆開示バッジ |
styles/all.css |
上の機能シートをこの順で全部 |
var(--octc-*) を使う機能シートは、先に core.css を読むか、ホスト側で同じ
トークンを定義してください。フル Tweet の chrome は独自の --ox-tweet-* を
持つので core.css は不要です。
これらのファイルはパッケージビルド時に crates/ox_content_ssg からコピー
されます。組み込み SSG も同じソースを読むので、公式 chrome が独自ホスト向け
import とずれません。
独自ホスト#
モジュール変換器(ssg: false):
import { oxContent } from "@ox-content/vite-plugin";
export default {
plugins: [
oxContent({
srcDir: "content",
ssg: false,
embeds: { twitter: { fetch: true, appearance: "full" } },
}),
],
};
@import "@ox-content/vite-plugin/styles/core.css";
@import "@ox-content/vite-plugin/styles/social.css";
@import "@ox-content/vite-plugin/styles/twitter-full.css";
transformAllPlugins() を直接呼ぶとき:
import { transformAllPlugins } from "@ox-content/vite-plugin";
const html = await transformAllPlugins(sourceHtml, {
twitter: { fetch: true, appearance: "full" },
});
html を描画するホストで、対応するスタイルシートを import してください。
crate の CSS をアプリにコピーしないでください。
renderMarkdown() と createMarkdownProcessor() も同じです。返すのは
マークアップで、有効にした機能の公式シートは自分で import します。
core.css は既定の --octc-* パレットを持っています。代わりに
@ox-content/theme-color-* のスキームを使いたいホストや、ページのパレットと
レイアウトは自前のまま --octc-syntax-* のコードカラーだけ欲しいホストは、
renderThemeTokenCss() でトークンを自分で描画します。
テーマを参照してください。
独自ホストのレスポンシブな Markdown table では、body typography、prose 幅、
リンク、blockquote、table cell style を host 側で持っているなら
styles/markdown-tables.css だけを import してください。core.css は
組み込み SSG の prose theme 全体が必要なときだけ使います。文書全体を独自
ホストが持つ場合や、独自 dev server で変換済み Markdown を返す場合は、
framework に依存しない helper を追加してください。
import { enhanceMarkdownTables } from "@ox-content/vite-plugin/markdown-tables";
enhanceMarkdownTables(document, {
label: "横スクロールできる表",
});
window.addEventListener("resize", () => enhanceMarkdownTables(document));
この helper は .content table を計測し、実際に overflow する table にだけ
tabindex="0" を付けます。table semantics、caption、header、方向、既存の
accessible name は維持します。label は他の host chrome と同じ locale
経路から渡してください。
overflow する table には値なしの data-ox-table-scrollable 属性が付きます。
スクロール状態を styling する host CSS は値ではなく存在
([data-ox-table-scrollable])で match してください。focus rule 自体は
styles/markdown-tables.css に入っているので、fallback の
2px solid Highlight を差し替えたいときは host 側で --octc-focus-ring と
--octc-focus-offset を定義します。