很棒的独立组件(Web 组件)

Avatar of Chris Coyier
Chris Coyier

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

在最近的一次 An Event Apart 演讲中,Dave 指出,Web Components 现在才真正成为生产环境 Web 开发的实用选择。例如,Edge 采用 Chromium 才一年左右。在此之前,Edge 不支持任何 Web Component 内容。如果您很久以前就发布了它们,那么您就必须使用相当大的 polyfill,或者采用渐进增强的方式,如果它们失败,则会以优雅的方式或在受控的环境中失败,例如每个人都使用相同计算机的内联网(或者是在类似 Electron 的东西中)。

在我看来,Web Components 还有很长的路要走才能让大多数开发者感到吸引,但它们正在逐步实现。我认为推动其采用的一件事是,得益于 ES 模块以及 import JavaScript 的便捷性,预构建组件的开发者体验(DX)变得无比简单。

我之前就提到了这一点:看看 Nolan Lawson 的表情符号选择器有多么简单

只需要一行 JavaScript 和一行 HTML 代码就能使其运行,再加一行 JavaScript 代码就能将其连接起来并返回一个选择结果的 JSON 响应。

确实令人信服。可以说,这就是所谓的 DX。

像这样的 Web Components 并非孤例,因此本文的标题就是如此。Dave 整理了一个 很棒的独立组件 列表。也就是说,不是更大更复杂系统1的一部分的 Web Components,而仅仅是本身就有用的一个小巧组件,就像表情符号选择器一样。Dave 的代码库列出了大约 20 个这样的组件。

以 GitHub(这家公司)的这个组件为例,一个复制到剪贴板的 Web Component

对于一个大小约为 3KB 的组件来说,这很不错。它的生产方式随您的意愿而定。您可以从 CDN 上使用它。也可以将其捆绑到您的代码中。或者将其保留为按需的单次使用。无论哪种方式,它都非常易于使用。就这个独立组件而言,甚至都没有 Shadow DOM 需要处理。

这并不是在贬低 Shadow DOM,它可能是 Web Components 最实用的功能(并且无法由库复制,因为它是一个原生浏览器功能),但是对其进行样式设置的选项 并不是我最喜欢的。如果您使用了三个不同的独立组件,它们对如何通过 Shadow DOM 进行样式设置有三个不同的观点,这将会变得很烦人。

我设想,开发者会先试用这些东西,看到其好处,然后在构建的内容中越来越多地使用它们,甚至创建自己的组件。从 Web Components 构建设计系统在我看来是一个真正的甜蜜点,就像许多知名品牌2已经做到的那样。

我们的梦想是让人们真正整合常见的 UI 模式。就像,即使我们永远无法得到原生的 HTML “标签”,也可能有一个 Web Component 可以提供它们,并使 UI、UX 和可访问性完美无缺,同时保持其可样式化,以便任何网站都可以使用它们。但首先,它需要存在。


  1. 这也是使用 Web Components 的一种不错的方式,但易用性会吸引眼球,这一点很重要。
  2. 人们总是提到 Lightning Design System 是一种基于 Web Components 的设计系统,但我没有看到。例如,这个手风琴 看起来像是带有类名的语义 HTML,而不是 Web Components。我错过了什么?