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

例子:

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

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

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

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


当前回答

为什么CSS使用假元素?

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

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

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

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

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

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

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

其他回答

博士TL;

自定义标记在HTML中无效。这可能会导致渲染问题。 使将来的开发更加困难,因为代码不可移植。 有效的HTML提供了很多好处,比如SEO、速度和专业性。

长回答

有一些争论认为带有自定义标记的代码更有用。

但是,这会导致无效的HTML。这对你的网站不好。

有效的CSS/HTML | StackOverflow的要点

谷歌更喜欢它,所以它对SEO有好处。 它使你的网页更有可能在你没有测试过的浏览器上运行。 它让你看起来更专业(至少对一些开发人员来说) 兼容的浏览器可以更快地呈现[有效的HTML] 它指出了一堆你可能忽略的、影响你可能没有测试的东西的模糊错误,例如代码页或页面的语言集。

为什么验证| W3C

作为调试工具的验证 验证作为一种面向未来的质量检查 验证简化了维护 验证有助于教授好的实践 认可是专业的标志

从早期开始,CSS就被设计为与标记无关的,因此它可以与任何标记语言一起使用,生成类似DOM结构的树(例如SVG)。任何符合名称令牌生成的标记在CSS中都是完全有效的。所以你的问题是关于HTML而不是CSS本身。

HTML5规范支持带有自定义标记的元素。HTML5标准化了DOM中解析未知元素的方式。所以严格来说,HTML5是第一个支持自定义元素的HTML规范。你只需要使用HTML5 doctype <!文档中的DOCTYPE html>。

至于自定义标签名称本身……

本文档http://www.w3.org/TR/custom-elements/建议您选择的自定义标记至少包含一个“-”(破折号)符号。这样它们就不会与将来的HTML元素冲突。因此,你最好把你的文档修改成这样:

<style>
so-cool {
    color:blue;
}
</style>

<body>
    <so-cool>HELLO</so-cool>
</body> 

CSS是一种样式表语言,可用于表示XML文档,而不仅仅是(X)HTML文档。带有自制标记的代码片段可以是合法XML文档的一部分;如果你把它包含在一个根元素中,它就是1。可能你已经有一个<html>…</html> around it?当前的任何浏览器都可以显示XML文档。

当然,它不是一个很好的XML文档,它缺少语法和XML声明。如果使用HTML声明头(可能是发送正确mime类型的服务器配置),那么它将是非法的HTML。

HTML比普通XML有优势,因为元素有语义意义,在网页表示的上下文中是有用的。工具可以使用这种语义,其他开发人员知道它的含义,它更不容易出错,更易于阅读。

但在其他上下文中,最好使用CSS和XML和/或XSLT来表示。这就是你所做的。因为这不是你的任务,你不知道你在做什么,HTML/CSS是更好的方式,大多数时候你应该在你的场景中坚持使用它。

您应该在文档中添加一个(X)HTML头,以便工具能够为您提供有意义的错误消息。

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

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

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

人们很少使用自制的标记,因为它们不太可能在当前的每个浏览器和未来的每个浏览器中都可靠地工作。

浏览器必须将HTML代码解析为它所知道的元素,然后将生成的标记转换为适合文档对象模型(DOM)的其他内容。由于web标准没有涵盖如何处理标准之外的所有内容,web浏览器倾向于以不同的方式处理非标准代码。

在不增加不确定性元素的情况下,使用一堆不同的浏览器进行Web开发已经足够棘手了,这些浏览器都有自己的怪癖。最好的办法是坚持那些标准中的东西,那是浏览器供应商试图遵循的,所以它有最好的机会实际工作。