| title | Placeholder extension | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| tags |
|
||||||||||||||||||
| meta |
|
||||||||||||||||||
| extension |
|
import { CodeDemo } from '@/components/CodeDemo'
This extension provides placeholder support. Give your users an idea what they should write with a tiny hint. There is a handful of things to customize, if you feel like it.
npm install @tiptap/extensionsimport { Editor } from '@tiptap/core'
import { Placeholder } from '@tiptap/extensions'
new Editor({
extensions: [
Placeholder.configure({
placeholder: 'Write something …',
}),
],
})Placeholders are displayed with the help of CSS.
Display a Placeholder only for the first line in an empty editor.
.tiptap p.is-editor-empty:first-child::before {
color: #adb5bd;
content: attr(data-placeholder);
float: left;
height: 0;
pointer-events: none;
}
Display Placeholders on every new line.
.tiptap p.is-empty::before {
color: #adb5bd;
content: attr(data-placeholder);
float: left;
height: 0;
pointer-events: none;
}
The added CSS class if the editor is empty.
Default: 'is-editor-empty'
Placeholder.configure({
emptyEditorClass: 'is-editor-empty',
})The added CSS class if the node is empty.
Default: 'is-empty'
Placeholder.configure({
emptyNodeClass: 'my-custom-is-empty-class',
})The data attribute used to store the placeholder text. When setting this to 'my-placeholder', the placeholder text will be stored in the data-my-placeholder attribute, for example.
Default: 'placeholder'
Placeholder.configure({
dataAttribute: 'my-placeholder'
})The placeholder text added as data-placeholder attribute.
Default: 'Write something …'
Placeholder.configure({
placeholder: 'My Custom Placeholder',
})You can even use a function to add placeholder depending on the node:
Placeholder.configure({
placeholder: ({ node }) => {
if (node.type.name === 'heading') {
return 'What’s the title?'
}
return 'Can you add some further context?'
},
})Show decorations only when editor is editable.
Default: true
Placeholder.configure({
showOnlyWhenEditable: false,
})Show decorations only in currently selected node.
Default: true
Placeholder.configure({
showOnlyCurrent: false,
})Show decorations also for nested nodes. Only textblock nodes (nodes that directly contain inline content, such as paragraph or heading) will receive a placeholder — wrapper nodes like bulletList or listItem are automatically skipped.
Default: false
Placeholder.configure({
includeChildren: true,
})packages/extensions/src/placeholder
import { Editor } from '@tiptap/core'
import { Placeholder } from '@tiptap/extensions/placeholder'
new Editor({
extensions: [Placeholder],
})