除了属性,是啥决定了 html 元素的行为?

Posted

技术标签:

【中文标题】除了属性,是啥决定了 html 元素的行为?【英文标题】:Other than attributes, what determines the behavior of html elements?除了属性,是什么决定了 html 元素的行为? 【发布时间】:2015-01-16 04:13:00 【问题描述】:

我试图问一个比“浏览器如何工作??”更具体的问题,请多多包涵:)

如果我理解正确的话,html 元素可能有一些默认属性来决定它们的行为。比如<div>默认设置了display: block属性,而spandisplay: inline

这些默认值存在是因为它们是在浏览器的默认样式表中定义的。

好吧,我明白了(希望如此)。但是<br /><img> 呢?那些人的行为不仅仅是由他们的属性决定的吗? 是否只能由浏览器的实现来让它们按照 W3 html5 规范的要求行事?

此外,这种元素行为是否有官方说法,或者它只是属于“浏览器实现”?

【问题讨论】:

默认属性在 HTML5 中变得更加复杂。元素现在可以分为多个(甚至没有)content categories。 【参考方案1】:

所以,你真的在​​这里问了两个问题:

    HTML 元素的默认呈现方式和行为是什么? 谁/什么决定了它在浏览器中的工作方式?

让我们从问题 2 开始

HTML 规范由W3C 中的一个名为HTML Working Group 的小组编写和审核。当他们就规范达成一致时,他们将其作为建议书发布。您可以阅读 HTML 5 规范 here,但我不建议阅读整篇文章 - 它很长而且无聊充满了技术术语。

但是,W3C 的建议仅定义了 HTML 功能的语法和预期用途 - 它没有定义浏览器应如何呈现 HTML。浏览器供应商,如 Microsoft (IE)、Mozilla (FireFox)、Apple (Safari) 和 Google (Chrome),可以确定他们的浏览器如何呈现和实现 HTML 的功能。

幸运的是,大多数常见的 HTML 元素在不同浏览器之间的行为几乎完全相同。供应商之间保持一致符合供应商的最大利益,因为如果他们中的一个决定做一些与其他人截然不同的事情,那么构建网站的人将不得不花费更多时间来支持该特定浏览器,并且它会被淘汰。支持(就像 IE 6 直到 IE 11 的情况一样)。

什么决定了 HTML 元素的行为?

浏览器的渲染引擎。一些浏览器共享相同的渲染引擎 (如 Safari 和 Chrome)(不再适用 - 请参阅 cmets),但并非全部。 This article 提供了一些关于如何构建浏览器的见解(并导致更多见解),here's 一篇文章列出了几个浏览器引擎。

在大多数情况下,您可以通过更改其 CSS 属性来影响 HTML 文档的外观,但如果不使用 javascript 编写脚本,大多数 HTML 元素的 行为 是无法改变的。

浏览器应用的默认 CSS 样式由名为 User Agent Stylesheet 的样式表定义。这些通常是浏览器供应商设计的非常基本的样式,目的是使 HTML 文档更具可读性,而不会严重影响文档的呈现。

但是,不同的浏览器应用了如此多的基本样式,对于 Web 开发人员/设计师来说,所谓的 CSS 重置是很常见的。 Normalize.css 就是一个很好的例子,也是最受欢迎的例子之一。

【讨论】:

你确定现在 Safari 和 Chrome 共享同一个渲染引擎吗? 不同的 JavaScript 引擎,但我很确定它们都使用 WebKit 进行布局。 来自***关于 Webkit 的文章:“WebKit 被用作 Safari 中的渲染引擎,以前被 Google 的 Chrome 网络浏览器使用。” 这很有趣。那么为什么 webkit 供应商前缀仍然可以在 chrome 中使用? 因为他们保留它们是为了向后兼容。【参考方案2】:

我相信这取决于浏览器的实现。它出现在屏幕上的方式取决于浏览器的实现。 虽然,所有浏览器都同意它应该在屏幕上的显示方式。 这些标准由World Wide Web Consortium - (wikipedia) 定义。

我想您正在寻找的这些信息可以在这些网站上找到!

【讨论】:

以上是关于除了属性,是啥决定了 html 元素的行为?的主要内容,如果未能解决你的问题,请参考以下文章

单击 <button> 元素时的标准行为是啥?它会提交表格吗?

CSS布局相关——盒模型和浮动

html,css,javascript在制作网页中的作用是啥?三者之间有何种联系?

HTML 事件

JSP 行为(动作)元素

[css]《css揭秘》学习-多重边框