项目

tiptap 样式

引言

Tiptap 是无头的,这意味着它不会提供内置样式。这也意味着,你可以完全控制编辑器的外观。以下方法允许你为编辑器应用自定义样式。

方法 1:为纯 HTML 添加样式

整个编辑器都在一个带有类 .tiptap 的容器内渲染。你可以利用这个类来将样式限定在编辑器内容上:

/* 仅限于编辑器 */
.tiptap p {
  margin: 1em 0;
}

如果你将存储的内容显示在其他地方,可能没有 .tiptap 容器,所以你可以直接对使用的 HTML 标签进行全局样式设置:

/* 全局样式 */
p {
  margin: 1em 0;
}

方法 2:添加自定义类

你可以完全控制渲染过程,包括为所有内容添加类。

扩展

大多数扩展允许通过 HTMLAttributes 选项向渲染的 HTML 添加属性。你可以使用它来添加自定义类(或其他属性)。这对于使用 Tailwind CSS 非常有帮助。

new Editor({
  extensions: [
    Document,
    Paragraph.configure({
      HTMLAttributes: {
        class: "my-custom-paragraph",
      },
    }),
    Heading.configure({
      HTMLAttributes: {
        class: "my-custom-heading",
      },
    }),
    Text,
  ],
});

渲染后的 HTML 将如下所示:

<h1 class="my-custom-heading">示例文本</h1>
<p class="my-custom-paragraph">哇,这真的很定制。</p>

如果扩展本身已经定义了类,你的自定义类会被追加。

编辑器元素

甚至可以将类传递给包含编辑器的元素:

new Editor({
  editorProps: {
    attributes: {
      class:
        "prose prose-sm sm:prose lg:prose-lg xl:prose-2xl mx-auto focus:outline-none",
    },
  },
});

结合 Tailwind CSS

编辑器与 Tailwind CSS 也配合良好。下面是一个使用 @tailwindcss/typography 插件进行样式的示例。

https://embed.tiptap.dev/preview/Experiments/Tailwind

智能感知

如果你正在使用 TailwindCSS 智能感知,请将以下片段添加到 .vscode/settings.json 中,以在 TipTap 对象内部启用智能感知支持:

"tailwindCSS.experimental.classRegex": [
  "class:\\s*?[\"'`]([^\"'`]*).*?,"
]

方法 3:自定义 HTML

或者,你可以为扩展定制标记。以下例子会创建一个自定义的粗体扩展,它不渲染 <strong> 标签,而是使用 <b> 标签:

import Bold from "@tiptap/extension-bold";

const CustomBold = Bold.extend({
  renderHTML({ HTMLAttributes }) {
    // 原始:
    // return ['strong', HTMLAttributes, 0]
    return ["b", HTMLAttributes, 0];
  },
});

new Editor({
  extensions: [
    // ...
    CustomBold,
  ],
});

你应该将自定义扩展放在单独的文件中,但我想你已经明白了。

在本文档中