在我的课上,我玩了一下,发现CSS与虚构的元素一起工作。

例子:

imsocool { 颜色:蓝色; } < imsocool >你好< / imsocool >

当我的教授第一次看到我使用它时,他有点惊讶于虚构元素的工作,并建议我简单地将所有的虚构元素更改为带有ID的段落。

为什么我的教授不让我使用合成元素?他们工作效率很高。

另外,为什么他不知道存在虚构元素,并与CSS一起工作。它们不常见吗?


当前回答

为什么CSS使用假元素?因为它不会伤害任何人因为你不应该使用它们。

为什么我的教授不让我使用合成元素?因为如果该元素在未来由规范定义,那么您的元素将具有不可预测的行为。

另外,为什么他不知道存在虚构元素,并与CSS一起工作。它们不常见吗?因为他和大多数其他web开发人员一样,明白我们不应该使用将来可能会随机损坏的东西。

其他回答

为什么CSS使用假元素?

(大多数)浏览器被设计成(在某种程度上)向前兼容未来添加的HTML。未识别的元素被解析到DOM中,但没有与它们相关的语义或专门的默认呈现。

当一个新元素被添加到规范中时,有时CSS、JavaScript和ARIA可以用来在旧的浏览器中提供相同的功能(元素必须出现在DOM中,以便这些语言能够操作它们来添加该功能)。

(有一个自定义元素的规范,但是它们有特定的命名要求,并且需要使用JavaScript进行注册。)

为什么我的教授不让我使用合成元素?

它们不被HTML规范所允许 它们可能与将来同名的标准元素冲突 可能有一个现有的HTML元素更适合这个任务

也;为什么他不知道构成元素的存在并与CSS一起工作。它们不常见吗?

是的。人们不使用它们是因为它们有上述问题。

关于其他的答案,有一些事情要么措辞不当,要么可能有点不正确。

FALSE(略):非标准HTML元素“不允许”、“非法”或“无效”。

不一定。他们“不合格”。有什么不同?有些东西可以“不符合”,但仍然是“允许的”。W3C不会派HTML警察到你家把你拖走。

W3C这样做是有原因的。一致性和规范是由一个团体定义的。如果恰好有一个较小的社区出于更特定的目的使用HTML,并且他们都同意一些他们需要的新元素以使事情变得更容易,他们可以拥有W3C所说的“其他适用规范”。(显然,这是一种过于简单的做法,但你可以理解)

也就是说,严格的验证器会将您的非标准元素声明为“无效”。但这是因为验证器的工作是确保符合它验证的任何规范,而不是确保浏览器或使用的“合法性”。

FALSE(略):非标准HTML元素将导致呈现问题

有可能,但不太可能。(将“will”替换为“might”)导致呈现问题的唯一方式是您的自定义元素与另一个规范冲突,例如对HTML规范的更改或同一系统内的另一个规范(如SVG、Math或其他自定义的东西)。

事实上,CSS可以样式化非标准标签的原因是因为HTML规范清楚地指出:

用户代理必须将它们不理解的元素和属性视为语义中立的;将它们留在DOM中(用于DOM处理器),并根据CSS(用于CSS处理器)对它们进行样式化,但不从中推断任何含义

注意:如果您想使用自定义标记,请记住稍后对HTML规范的更改可能会破坏您的样式,因此请做好准备。然而,W3C不太可能实现<imsocool>标记。

非标准标签和JavaScript(通过DOM)

您可以使用JavaScript访问和修改自定义元素的原因是,规范甚至讨论了如何在DOM中处理它们,DOM是允许您操作页面上元素的(非常可怕的)API。

htmllunknownelement接口必须用于本规范(或其他适用规范)未定义的HTML元素。

TL;DR:符合规范是为了沟通和安全的目的。除了验证器以外,其他任何方法都允许不一致性,验证器的唯一目的是强制一致性,但其使用是可选的。

例如:

var wee = document.createElement('wee');
console.log(wee.toString()); //[object HTMLUnknownElement]

(我确信这会引起争议,但这是我的2分)

现代浏览器将未知元素视为div。这就是它们有效的原因。这是即将到来的HTML5标准的一部分,该标准引入了模块化结构,可以向其中添加新元素。

在较老的浏览器(我认为是IE7-)中,你可以应用javascript技巧,之后它们也能正常工作。

下面是我在寻找例子时发现的一个相关问题。

这里有一个关于Javascript修复的问题。事实证明IE7确实不支持这些开箱即用的元素。

也;为什么他不知道自制标签的存在和CSS的工作。它们不常见吗?

是的,相当。但特别的是:它们没有额外的用途。他们是html5的新手。在HTML的早期版本中,未知标记是无效的。

Also, teachers seem to have gaps in their knowledge, sometimes. This might be due to the fact that they need to teach students the basics about a given subject, and it doesn't really pay off to know all ins and outs and be really up to date. I once got detention because a teacher thought I programmed a virus, just because I could make a computer play music using the play command in GWBasic. (True story, and yes, long ago). But whatever the reason, I think the advice not to use custome elements is a sound one.

实际上你可以使用自定义元素。下面是关于这个主题的W3C规范:

http://w3c.github.io/webcomponents/spec/custom/

这里有一个教程来解释如何使用它们:

http://www.html5rocks.com/en/tutorials/webcomponents/customelements/

正如@Quentin所指出的:这是开发早期的规范草案,它对元素名称施加了限制。

令人惊讶的是,没有人(包括我过去的自己)提到可访问性。使用有效标记而不是自定义标记的另一个原因是为了与最大数量的软件兼容,包括屏幕阅读器和人们出于可访问性目的所需的其他工具。此外,像WAI这样的可访问性法律要求建立可访问的网站,这通常意味着要求他们使用有效的标记。


显然没人提过,所以我来。

这是浏览器大战的副产品。

回到20世纪90年代,当互联网刚开始成为主流时,浏览器市场的竞争加剧了。为了保持竞争力和吸引用户,一些浏览器(最著名的Internet Explorer)试图通过试图弄清楚页面设计者的意思来提供帮助和“用户友好”,从而允许不正确的标记(例如,<b><i>foobar</b></i>将正确地呈现为粗体-斜体)。

这在某种程度上是有道理的,因为如果一个浏览器不断抱怨语法错误,而另一个浏览器接受你扔给它的任何东西,并吐出一个(或多或少)正确的结果,那么人们自然会涌向后者。

While many thought the browser wars were over, a new war between browser vendors has reignited in the past few years since Chrome was released, Apple started growing again and pushing Safari, and IE lost its dominance. (You could call it a “cold war” due to the perceived cooperation and support of standards by browser vendors.) Therefore, it is not a surprise that even contemporary browsers which supposedly conform strictly to web standards actually try to be “clever” and allow standard-breaking behavior such as this in order to try to gain an advantage as before.

不幸的是,这种放任行为导致了大量(有些人甚至认为是恶性的)标记不良的网页的增长。因为IE是最宽容、最受欢迎的浏览器,而且由于微软对标准的持续蔑视,IE因鼓励和推广糟糕的设计、传播和延续坏页面而臭名昭著。

现在你可能可以在一些浏览器上使用这样的怪癖和漏洞,但除了偶尔的谜题或游戏或其他东西,在创建网页和网站时,你应该始终坚持网页标准,以确保它们正确显示,并避免它们在浏览器更新时被破坏(可能完全被忽略)。