html - 如果有标签,为什么还需要标签?
问题描述
<html>
如果我们已经使用标签定义了这个文档是html,为什么还要添加<!DOCTYPE html>
标签?
是否可以添加任何其他标签来代替?
如果没有,我们为什么需要它?
解决方案
在语义层面...
<!DOCTYPE html>
和<html>
, 尽管都包含< angle brackets >
, 是根本不同的东西:
<!DOCTYPE html>
声明文档类型并且不解析为任何 DOM 元素。引用MDN 的 Doctype 文章,“其唯一目的是防止浏览器在呈现文档时切换到所谓的“怪癖模式” ”。<html>
但是,它会解析为 DOM 元素。您可以为其附加属性或使用 JavaScript 对其进行操作。例如,尝试将其粘贴到浏览器控制台中:document.querySelector('html').style.opacity = '0.5'
. 你可以用 来做到这一点<html>
,但不能用DOCTYPE
。
在规格层面...
为什么有任何标准?标准是必要的,以便实现者(例如浏览器供应商)知道他们需要构建什么,而开发人员知道他们正在开发什么。如果没有通用标准,就不可能构建可互操作的软件。
你当然可以质疑为什么标准被设定的方式的逻辑,答案几乎以“因为历史”(有时是“因为政治”)而告终。如果现在改变这些历史决定,它会破坏网络。
在标记级别...
lang
出于可访问性和 SEO 原因,始终在 HTML 元素上设置属性是最佳实践,您需要包含它才能做到这一点:
始终在 html 标记上使用语言属性来声明页面中文本的默认语言。
在编写代码或标记以明确表达您的意图以帮助其他人阅读您的作品时,这也是一般的最佳实践。仅出于这个原因,添加一个环绕的 HTML 标记会更清晰。
在 DOM 级别...
如果您没有在 HTML 元素上包含任何属性,那么您编写的内容如何解析实际上并不重要,因为HTML 非常宽容)(链接的信用@Run_Script)。无论如何,它都会被解析到相关的 DOM 节点,所以document.body.parentElement instanceof HTMLHtmlElement
永远都是true
.
尽管如此,出于上述原因,我还是建议始终包含它。
推荐阅读
- c - 不使用 fork() 的两个进程之间的通信
- java - 如何将不同的消息记录到 LoggerFactory 的不同文件中
- html - 如何使用 Flexbox 制作不对称的东西
- javascript - 单击时缩放到元素
- javascript - 反应:无法根据目标正确更新数组
- c# - 使用输出参数从 MethodInfo 创建委托,无需动态调用
- angular - 按键从数组中移除一个对象
- ff4j - 如何根据 RestController 路径参数设置 FF4j RegionFlippingStrategy?
- python - 将 .csv 格式的数据集添加到 TFDS
- mysql - 哪个 SQL 查询更高效,为什么?