編輯器

Editor Placeholder

參考
內容為空時顯示提示文字。

安裝

Terminal
pnpm add @tiptap/extension-placeholder
import Placeholder from '@tiptap/extension-placeholder'

placeholder 來自 tiptap Placeholder;admin-rich-editor/admin-editor 不內建,需自行安裝並注入 :extensions。空狀態視覺 CSS 依下方片段自行套用。

用法

<script setup lang="ts">import type { JSONContent } from '@tiptap/core'import Placeholder from '@tiptap/extension-placeholder'import { ref } from 'vue'import { cn } from '@/lib/utils'import { baseProseClass } from '@/components/admin/editor'import { AdminRichEditor, starterKitProseClass } from '@/components/admin/rich-editor'​const value = ref<JSONContent | string>('')​// placeholderExtension 為零配置預設;自訂文字用 Placeholder.configure({ placeholder })const extensions = [Placeholder.configure({ placeholder: '開始輸入內容…' })]​// empty-state 視覺 CSS 不內含於包,透過 class 落 root,descendant selector 命中內容const placeholderClass = `  [&_p.is-editor-empty:first-child]:before:pointer-events-none  [&_p.is-editor-empty:first-child]:before:float-left  [&_p.is-editor-empty:first-child]:before:h-0  [&_p.is-editor-empty:first-child]:before:text-text-40  [&_p.is-editor-empty:first-child]:before:content-[attr(data-placeholder)]`</script>​<template>  <admin-rich-editor    v-model="value"    :extensions="extensions"    :ui="{ base: cn(baseProseClass, starterKitProseClass, placeholderClass) }"  /></template>
<script setup lang="ts">import Placeholder from '@tiptap/extension-placeholder'import { ref } from 'vue'import { AdminRichEditor } from '@/registry/admin/ui/rich-editor'​const value = ref('')​// 空狀態 CSS 經 :ui.base 套到 editor content 元素const placeholderClass = `  [&_p.is-editor-empty:first-child]:before:pointer-events-none  [&_p.is-editor-empty:first-child]:before:float-left  [&_p.is-editor-empty:first-child]:before:h-0  [&_p.is-editor-empty:first-child]:before:text-text-40  [&_p.is-editor-empty:first-child]:before:content-[attr(data-placeholder)]`</script>​<template>  <admin-rich-editor    v-model="value"    :extensions="[Placeholder.configure({ placeholder: '開始輸入內容…' })]"    :ui="{ base: placeholderClass }"  /></template>

空狀態 CSS 說明

Placeholder extension 會在空節點加上 is-editor-empty class,並把 placeholder 文字放在 data-placeholder attr。上方片段以 ::before 偽元素把該 attr 渲染出來。

  • 僅首行:用 p.is-editor-empty:first-child(如範例)
  • 每一空行:改用 .is-empty,並改注入 Placeholder.configure({ showOnlyCurrent: false })

顏色使用 admin design token text-40,可依需要調整。

API 參考

@tiptap/extension-placeholder 套件 API 詳見 tiptap placeholder 官方文件。