视觉画布
用户直接在可视化环境中编辑页面,处理渲染后的页面而非描述。
26k+
GitHub 星
1.4M+
每月下载量
100+
GJS.Market 上的插件
BSD-3-Clause
核心许可
点击下面的任意元素,原地重新输入,然后更改外观。这里没有预览——画布就是页面,样式面板编辑的是你正在阅读的相同元素。
点击一个元素,然后输入来编辑
现在处于私测阶段
本页上的每一个字都可以编辑
选择此段并开始输入。然后从右侧面板更改其大小、颜色、对齐和间距——就像你的用户操作一样。
开始
样式
眉毛
颜色
路线排列
上面的游乐场是我们的。这些是真正的——完整的GrapesJS编辑器,只有在你要求时才加载,这样页面在那之前就能保持快速。
原版编辑器:画布、块、图层树、样式管理器和设备切换器,没有添加任何内容。
从演示版自己的网站加载一个iframe。
所见即所得(WYSIWYG)代表“所见即所得”(What You See Is What You Get)。所见即所得编辑器允许用户使用内容的可视化表示,而不必直接编辑原始HTML和CSS。他们工作时看到的页面就是他们将发布的页面。
编写HTML
结构,标记
写入CSS
外表,别处
保存并构建
还是没什么好看的
打开预览
初见结果
最终的结果是最终的产物,只有开发者才能达到。
打开视觉画布
页面已经在那里了
编辑已到位
在文本所在位置输入
视觉样式
改变它,然后看它改变
查看结果
你一直都看到了
结果存在于每一步,任何人都能达到目标。
用户可以在构建页面时看到它。
富文本编辑器是段落的合适工具。它负责文本格式化、标题和列表管理,并管理内联内容。页面构建器则更上一层:涵盖部分、栏、组件、图片、按钮、样式和响应式,这些内容围绕该文本构成页面。
| 能力 | 富文本编辑器 | 所见即所得页面构建器 |
|---|---|---|
| 文本编辑 | 是的 | 是的 |
| 页面布局 | 限量版 | 是的 |
| 拖拽 | 限量版 | 是的 |
| 组成部分 | 限量版 | 是的 |
| 可重复使用的块 | — | 是的 |
| 响应式布局 | 限量版 | 是的 |
| 自定义组件 | 限量版 | 是的 |
| 视觉样式 | 限量版 | 是的 |
GrapesJS 结合了可视化页面编辑和可扩展组件架构——而且它仍然包含一个富文本编辑器,因为原地编辑段落是所见即所得的一半。如果你的产品已经使用 CKEditor、TinyMCE、Froala 或 Quill,你可以保留它们:每个版本的集成都在 GJS.Market 上。
视觉编辑体验的构建模块,都是GrapesJS的核心,而不是你自己组装的东西。
用户直接在可视化环境中编辑页面,处理渲染后的页面而非描述。
内容在页面上的位置被更改,因此写作和看到结果之间没有间隔。
方块和组件通过视觉移动,投放目标显示元素落点。
字体、间距、颜色和布局通过面板而非样式表控制。
页面可根据编辑器内部视口大小调整,且不离开画布。
页面元素可以定义一次并重复使用,因此一个地方的变更可以传播到所有使用的地方。
图片和其他媒体通过资产管理器管理,你可以指向自己的存储。
完整的命令历史让用户可以放心尝试布局,无需担心丢失工作。
从一页开始
用户打开一个空白画布或模板,已经渲染成它将要成为的页面。
添加组件
分区、列、文本、图片和按钮会从块面板中直接投放到画布上。
编辑内容
文本在原地重新输入,图像被交换,直接在元素上而非表单中交换。
自定义造型
排版、颜色、间距和布局通过样式管理器进行修改并实时应用。
调整响应式布局
设备切换器缩小画布范围,使同一页可以根据断点调整。
预览
Editor Chrome 是隐藏的,用户看到页面时完全像访客一样。
保存
项目通过存储管理器写入你决定存放的位置。
发布
你的应用程序会把生成的HTML和CSS应用到你自己的流水线中。
同一个视觉编辑引擎隐藏在截然不同的产品之下。这些是它最常呈现的形态。
视觉编辑通常是由一个团队提出请求,另一个团队负责制作。这些人是对话双方的成员。
建立在可扩展的编辑引擎之上,而不是从零开始写选择、拖拽和撤销。
在你自己的路线图和应用中,将可视化页面创建作为产品功能。
用人们真正喜欢使用的编辑体验取代表单和预览内容流。
让非技术用户直观地控制页面,这样发布变更就不需要发布版本。
在现有内容系统中添加视觉编辑,而无需替换其底层的内容模型。
构建可重复使用的视觉编辑流程,并为客户提供一个以你品牌为标志的版本。
编辑器开箱即用,已经知道文本、图片、按钮和部分。让它感觉原生的是它如何教它应用已有的对象。
01
文本、图片、按钮、版块——每个页面都需要的通用构建模块,立即可用。
02
同样的原语,加上你的约束:哪些可以拖拽、嵌套、删除或编辑,哪些特性会出现在设置面板里。
03
你自己定义的类型——产品卡、定价表、预订小部件、地图、表单、自定义行动号召——每种类型都有你自己的数据和代码。
第三级的示例是你为自己产品构建的组件,而不是可下载的插件。GrapesJS 给你组件 API;组件知道什么由你决定。
在可视化编辑器中预览和调整视口大小的布局,而不是在手机上发布和检查。
每个视窗控制
设备是可配置的:上述三个是默认的,你可以定义设计系统实际使用的断点。从该断点开始,设置在更窄的设备上的样式。
GrapesJS 提供了可视化编辑层。它周围的所有内容——用户、权限、数据、存储和发布——都保留在你已经运行的应用中。
你的申请
你的基础设施
如果问题具体是如何在现有产品中安装编辑器,那该攻略有独立页面。 可嵌入页面构建器
围绕现有的应用架构构建编辑器,而不是把内容迁移到另一个托管平台上。
页面的去向
const editor = grapesjs.init({
container: '#editor',
// Each page is a row in your database, behind your own auth.
storageManager: {
type: 'remote',
autosave: true,
options: {
remote: {
urlStore: `/api/pages/${pageId}`,
urlLoad: `/api/pages/${pageId}`,
fetchOptions: { credentials: 'include' },
},
},
},
});
// Publishing stays on your side — your domains, your CDN, your workflow.
async function publish() {
await fetch(`/api/pages/${pageId}/publish`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ html: editor.getHtml(), css: editor.getCss() }),
});
}GJS.Market 卖插件;它不托管你的编辑器,不存储你的页面,也不运行你的数据库。存储管理器指向你给它的端点,背后是你自己的认证。
视觉编辑器看起来像是一个功能,实际上是十几个子系统,每个子系统都必须工作,才能感觉完成。
所见即所得编辑器的组成
从零开始
所有这些
与GrapesJS
从这里开始
这是范围的比较,而非进度——编辑制作所需时间取决于你的团队以及你实际需要多少。打造你的产品,而不是从零开始找另一个编辑。
一张空白画布是最难交给非技术用户的东西。起始布局给他们一个可以修改的东西,而不是创造的东西。
用户要求的布局
这些是建造者用户要求的布局,而不是产品列表。GJS.Market上预设的起始点是预设。
以下内容都是GJS.Market上的真实商品列表,包含其真实名称和价格。每个组别还关联其类别,因此这里总有更多内容。
四个起始组合,每个针对不同类型的产品。每个插件都是真实的列表,并标注其实时价格。
最微小却仍感觉像页面构建器
开源页面构建器编辑们管理着许多现有内容的页面
无头CMS编辑器作为产品功能的视觉编辑
营销人员发布着陆页却没有开发者
价格直接来自目录,且可能发生变化;产品页面具有权威性。
编辑
用户在画布上工作;编辑器将页面作为结构化项目数据保存。
保存
存储管理器会将这些数据发送到你的终端,无论是自动保存还是按需保存。
预览
编辑器的Chrome是隐藏的,或者页面是通过你自己的预览路径渲染的。
发布
你的应用程序导出HTML和CSS,并将其导入交付流程。
实时页面
页面是通过你的基础设施、你的域名、根据缓存规则进行的。
将编辑器连接到你自己的出版工作流程和基础设施。GrapesJS 负责制作页面;决定“上线”是什么意思是你的应用程序的工作。
核心是一个 npm 包和一个容器元素。之后的一切都决定了用户应该看到多少编辑器内容。
npm install grapesjsimport grapesjs from 'grapesjs';
import 'grapesjs/dist/css/grapes.min.css';
// The visual canvas. Everything the user sees here is the page itself,
// not a preview of it.
const editor = grapesjs.init({
container: '#editor',
// The panels that make the editing visual rather than textual.
styleManager: { appendTo: '#styles' },
deviceManager: {
devices: [
{ id: 'desktop', name: 'Desktop', width: '' },
{ id: 'tablet', name: 'Tablet', width: '768px' },
{ id: 'mobile', name: 'Mobile', width: '375px' },
],
},
});内联编辑和一个了解你规则的组件——这两件作品是将画布变成所见即所得编辑器的部分:
// "What you see is what you get" starts with editing text where it
// already sits. GrapesJS ships an inline rich-text editor, and you can
// replace it with whichever one your product already uses.
editor.setCustomRte({
enable(el, rte) {
el.contentEditable = true;
return rte;
},
disable(el) {
el.contentEditable = false;
},
});
// A component decides what the user is allowed to change visually.
editor.DomComponents.addType('quote', {
model: {
defaults: {
// Editable in place, but the frame around it stays yours.
editable: true,
droppable: false,
traits: ['author', 'source'],
},
},
});这就是整个表面:初始化、扩展、存储、发布。文档对每个管理器都有深入的介绍。
核心内容与框架无关;本页介绍如何在特定框架内安装。
从开源的视觉编辑基础开始,并围绕你的产品需求进行扩展。
GrapesJS 核心以 BSD-3-Clause 许可证发布。官方 React 封装程序是 MIT。
编辑器本身无需按座位或页面付费——$0对库收取费用,无论你为插件付费多少。
编辑器运行在你的应用程序中。没有服务可依赖,也没有外部能关闭的功能。
星级和下载数据最后一次是在2026-09-03上通过GitHub和npm API验证的。
相邻页面,针对本书仅涉及的问题。
从GrapesJS开始,定制编辑体验,添加你的产品所需的插件。