一个单一服务网站 来自 Alexander Vishnyakov,用于测试将任何特定 HTML 元素放入另一个类型 HTML 元素中是否有效。拥有一个快速参考非常方便。
有些组合感觉很明显:你能把一个 <video>
放在一个 <input
> 中吗?当然不行。有些则比较棘手:你能把一个 <div>
放在一个 <h1>
中吗?也不行 - 这周我就被这个问题困住了(真是笨)。有些则有点令人困惑,比如 <div>
是 <ol>
的无效子元素,但却是 <dl>
的有效子元素。
冒着听起来有点蠢的风险,我们究竟指的是什么?
?我试着把一个 div 放在一个 H1 标签中,它似乎按预期工作。我没有看到任何意外行为或明显的问题。
那么,这样做究竟有什么后果呢?
它会损害可访问性吗?它会损害 SEO 吗?它会导致某些浏览器出现奇怪的行为吗?或者它仅仅是
之类的事情。这是规范如何定义每个元素的内容。如果您查看 h1 (https://mdn.org.cn/en-US/docs/Web/HTML/Element/Heading_Elements),您可以看到“允许的内容”是“短语内容”(https://mdn.org.cn/en-US/docs/Web/Guide/HTML/Content_categories#phrasing_content)。div 不属于“短语内容”类别,因此这将使您的 HTML 标记无效,即使在这种情况下您没有遇到任何意外行为。使用验证器查看您得到的错误:https://validator.w3.org/nu/#textarea
例如,如果您尝试将 div 放在 p 中,您将看到奇怪的行为:https://jsfiddle.net/c15q24x7/(检查代码以了解为什么您没有红色着色)
也就是说,您应该始终尝试使用有效的标记,以避免任何潜在的问题,即使某些无效标记在某些情况下也能正常工作。
在我的情况下,使用 HTML 到 PDF 转换工具时,整个工具都卡住了,因为我在标题中使用了 div,而我不知道这样做是错误的。
在 h1 中使用 adiv 不是有效的 html。它将无法通过验证器。
将您的网页视为一些印刷媒体。将任何段落(从内容本身)放在标题中是否有意义?我想应该没有 - 语义,这就是为什么您不能将
<div>
放在<h1>
中。像这样的东西应该是一个 linter,真正检查您的代码并确保您没有搞砸它。
手动检查似乎不够好。
即使您的浏览器似乎按预期处理了它,之所以“这是规则”之类的事情很重要,是因为您无法在所有浏览器、所有设备、所有环境以及所有事件序列中对其进行测试 - 更不用说无法预见未来浏览器或系统升级的影响。浏览器设计师可以自由地以任何方便或有意义的方式解释不良代码,而这不会给我们任何关于它将如何被解释的保证。
在令人困惑的一面,div 在 ol 中无效,但在 ol 的 li 标签中有效。可以包含,很好的规范。
我的天啊,这太棒了。我的意思是,我应该比现在对 HTML 有更好的理解(我最近决定要“重新学习 HTML”),但拥有这样的工具非常有用。