Gutenberg 体验

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费信用额度!

WordPress 的全新编辑器 Gutenberg 发布已有一年多了。在我看来,围绕它的争议大部分已经平息。已经过去足够的时间让它的用户体验和可访问性得到了改进,人们也更加清晰地看到了它的潜力。没有回头路了。

我偶然发现了一些文章,比如 Haris Zulfiqar 说他 押注于它,Nick Hamze 说区块是 下一代的

虽然我认为它仍然存在一些瑕疵(比如为什么我不能在块引用中放入列表?为什么我不能向链接添加类?为什么我不能通过箭头键浏览块选择器?),但我总体上非常喜欢它。而且不仅仅是概念上的。我将 将其作为我的 2020 年目标之一,将 CSS-Tricks 迁移到 Gutenberg,因此我在 1 月份就立即着手进行了。

我们已经迈出了一步

由于我们已经 将新闻通讯创作体验转换为新的编辑器,因此我们已经积累了一些使用 Gutenberg 的经验。我们的新闻通讯是 CSS-Tricks 上的自定义文章类型,这些文章类型在此处发布为公共 URL,具有自定义 RSS Feed,并由 MailChimp 发送,MailChimp 获取并读取该 RSS Feed。

我们可以通过 Gutenberg Ramp 插件为新闻通讯打开 Gutenberg。这非常适合自定义文章类型和具有个别 ID 的文章,但我希望仅为新内容打开 Gutenberg。我最终修改了该插件。 这是一个拉取请求,以防那里有人认为这是一个好主意。

这对我来说很重要,因为我们有数万篇使用旧编辑器创建的旧文章,即使 Gutenberg 在我们打开它们进行编辑时不会破坏它们,但它为它们提供的编辑体验也不如“经典”编辑器(例如,我们有用于特殊代码块等的特殊按钮)。

处理旧内容

如果 Gutenberg 可以在打开旧文章时将其转换为正确的块,那就太好了,但这在目前看来像是一个梦想。比如,它必须解析 HTML,识别哪些块看起来像块,识别哪个块最合理,包括我们自定义的块(它们是最重要的),并且必须以一种不脆弱的方式非常正确地执行此操作。

目前,旧内容仅使用旧编辑器。甚至没有一种简单的方法可以从编辑器中为单个文章启用 Gutenberg。(我可以将值硬编码到 Gutenberg Ramp 使用中,但这有点乏味。)

我有点担心旧编辑器会真的变得很糟糕。例如,我开始使用它的一个主要原因是,在这个网站上,旧编辑器会随机滚动到页面底部。我绞尽脑汁也想不出为什么,但这使得我的创作变得非常讨厌。只是一个很小的不起眼的小问题,让我想要使用正在积极开发的编辑器体验。

但即使旧编辑器变得很糟糕,为所有内容启用 Gutenberg 也不是那么糟糕。所有旧内容都将位于一个大型的“经典”块中,并且一切都会正常。

总之,它正在工作!

为新文章启用 Gutenberg 本身就是一个不小的挑战,但现在它对我们来说已经开启了,我们正在使用它创建所有新内容。我在这里只是代表我自己说话,但我太喜欢它了。它对内容创作来说是一个巨大的升级,我有点痴迷于它。团队也很高兴。

创建自定义块

看看我们拥有的这个花哨的文本块

CSS-Tricks 上的“提示”块

你可能会想,哦,酷,一个创建自定义块的机会。事实上,我们甚至涵盖了学习和 在一个完整的系列中创建 Gutenberg 块。但这提出了一个非常相关的情况:何时构建块块唯一独特之处在于它具有一个特殊的类名,我们的 CSS 使用该类名来设置该块的样式。仅此而已。添加类名是每个块的内置功能,因此此处自定义块实际上没有必要。

事实上,我们可以更进一步,使用此确切类创建一个文本块作为“可重复使用的块”,这样我们甚至不必记住或输入该类名。在我使用此类创建文本块后,我从 kebab 菜单中选择“转换为可重复使用的块”,现在它将永远保存为可重复使用的块。

我们现在已经在其他一些方面使用它了,比如我们的“文章系列”块(一个<h4><ol>以及一个带有特殊<div>-with-a-class 包装器的块)以及脚注块等等。

但我们确实也需要一些自定义块,为此我使用 create-guten-block 来制作一个特殊的插件¹ 来创建它们。我看到一个对我们来说非常重要的插件是代码块。代码块已经有一个原生块。它基本上将代码放在<pre>标签中,并且来自 Gutenberg 的内容默认情况下已转义。

我们花哨的代码块允许我们选择它是哪种语言,突出显示某些行,并提供自定义标签。这在我们的旧编辑器中都可以通过 HTML 属性实现,因此此块只是在所有这些之上提供了一个不错的 UI。

该块非常特定于 CSS-Tricks,因此开源它没有多大意义。但我创建的另一个块是开源的,那就是 CodePen 嵌入块。我在 CodePen 博客上写过它

它允许您粘贴 CodePen URL,并将其转换为 CodePen 嵌入。oEmbed 默认情况下已经可以做到这一点,但是使用此插件,您可以控制所有内容,例如高度、主题和默认选项卡。

在创作时实际看到嵌入的 Pens 非常棒!

尚未解决的挑战

目前最大的挑战是处理图像。在旧编辑器中,我们集成了 一个非常非常花哨的设置Cloudinary。图像会自动上传到 Cloudinary,断点会以编程方式确定,会创建多个尺寸,会创建响应式图像语法,最终出现在 HTML 中的是一个完美的响应式图像语法,其中图像由 Cloudinary 托管。这使我们能够利用 CDN 并以最佳格式提供图像。

使用 Gutenberg 创建的文章中没有发生这种情况。 😭

我需要找到或开发一个新的系统,该系统可以在网站上的任何位置出色地处理图像,理想情况下使用一个不太定制的系统,该系统更易于维护。我可能会使用 Cloudinary 解决这个问题,我可能会尝试其他服务,我可能会让 WordPress 直接处理它,并由 Jetpack 网站加速器 支持。目前还不确定。总有事情要做。

  1. 我看到 WordPress 本身也开始参与块脚手架游戏。他们的“create-wordpress-block”概念已经进入了 Gutenberg 存储库 本身,您可以使用npm init @wordpress/block [options] [slug]启动它。