HTML自定义标签名必须含破折号,因规范强制要求以此区分用户元素与未来原生标签;不带破折号(如mytag)注册会抛DOMException;前缀(如shop-)属协作约定,非语法强制;注册须早于标签使用,否则需手动upgrade。

HTML 本身没有命名空间机制,所谓“命名空间”在 HTML 中实际是靠自定义标签名的语法约束和注册行为来模拟隔离效果;自定义标签必须含破折号(-),否则 customElements.define() 会直接抛错。
为什么自定义标签名必须带破折号
这是 HTML 规范硬性要求:浏览器通过破折号识别“用户定义元素”,避免与未来可能被标准化的原生标签冲突。不带破折号的名如 mytag 或 tabs 无法注册,调用 customElements.define('mytag', ...) 时会抛出 DOMException: The element name is not valid。
常见错误现象:
- 开发时写了
class MyTag extends HTMLElement { ... },但注册用customElements.define('mytag', MyTag)→ 报错 - 复制示例代码时漏掉破折号,比如把
my-greeting写成mygreeting - 用下划线或驼峰,如
my_greeting、myGreeting→ 同样不合法
自定义标签与 class/id 命名规范不能混用
自定义标签名(如 my-button)和普通 class 或 id 的命名逻辑完全不同:前者是全局注册的 DOM 类型,后者是样式/脚本操作的标识符。它们共用 kebab-case,但语义层级不同。
容易踩的坑:
生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur
- 把自定义标签当 class 用:
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










