在我的课上,我玩了一下,发现CSS与虚构的元素一起工作。
例子:
imsocool { 颜色:蓝色; } < imsocool >你好< / imsocool >
当我的教授第一次看到我使用它时,他有点惊讶于虚构元素的工作,并建议我简单地将所有的虚构元素更改为带有ID的段落。
为什么我的教授不让我使用合成元素?他们工作效率很高。
另外,为什么他不知道存在虚构元素,并与CSS一起工作。它们不常见吗?
在我的课上,我玩了一下,发现CSS与虚构的元素一起工作。
例子:
imsocool { 颜色:蓝色; } < imsocool >你好< / imsocool >
当我的教授第一次看到我使用它时,他有点惊讶于虚构元素的工作,并建议我简单地将所有的虚构元素更改为带有ID的段落。
为什么我的教授不让我使用合成元素?他们工作效率很高。
另外,为什么他不知道存在虚构元素,并与CSS一起工作。它们不常见吗?
当前回答
根据规格:
CSS
类型选择器是使用CSS限定名称语法编写的文档语言元素类型的名称
我以为这是元素选择器,但显然它实际上是类型选择器。规范继续讨论了CSS限定名称,它对名称的实际内容没有任何限制。也就是说,只要类型选择器匹配CSS限定名称语法,它就是技术上正确的CSS,并将匹配文档中的元素。对于特定规范(HTML或其他规范)中不存在的元素,没有特定于css的限制。
HTML
在文档中包含您想要的任何标签没有官方限制。但是,文档确实说了
作者不能将元素、属性或属性值用于其适当的预期语义目的以外的目的,因为这样做会妨碍软件正确处理页面。
然后它说
作者不能使用本规范或其他适用规范不允许的元素、属性或属性值,因为这样做会大大增加将来扩展该语言的难度。
我不确定具体在哪里或者规范是否说未知元素是允许的,但它确实谈到了HTMLUnknownElement接口的未知元素。有些浏览器甚至不能识别当前规范中的元素(我想到了IE8)。
虽然有一个自定义元素的草案,但我怀疑它还没有在任何地方实现。
其他回答
...我只是简单地将我所有的自制标签更改为带有ID的段落。
我实际上不同意他关于如何正确做这件事的建议。
<p>标记用于段落。我看到人们一直在使用它而不是div——仅仅是为了空格的目的,或者因为它看起来更温和。如果不是一个段落,就不要用。 你不需要或想要把ID贴在所有东西上,除非你需要专门针对它(例如用Javascript)。使用类或直接使用div。
YADA(又一个(不同的)答案)
编辑:请参阅下面BoltClock关于类型、标签和元素的评论。我通常不担心语义学,但他的评论非常合适,信息量很大。
Although there are already a bunch of good replies, you indicated that your professor prompted you to post this question so it appears you are (formally) in school. I thought I would expound a little bit more in depth about not only CSS but also the mechanics of web browsers. According to Wikipedia, "CSS is a style sheet language used for describing ... a document written in a markup language." (I added the emphasis on "a") Notice that it doesn't say "written in HTML" much less a specific version of HTML. CSS can be used on HTML, XHTML, XML, SGML, XAML, etc. Of course, you need something that will render each of these document types that will also apply styling. By definition, CSS does not know / understand / care about specific markup language tags. So, the tags may be "invalid" as far as HTML is concerned, but there is no concept of a "valid" tag/element/type in CSS.
现代的可视化浏览器不是单一的程序。它们是不同“引擎”的混合体,各自承担着特定的任务。至少我能想到3个引擎,渲染引擎,CSS引擎和javascript引擎/VM。不确定解析器是否是呈现引擎的一部分(反之亦然),或者它是否是一个单独的引擎,但您可以理解。
Whether or not a visual browser (others have already addressed the fact that screen readers might have other challenges dealing with invalid tags) applies the formatting depends on whether the parser leaves the "invalid" tag in the document and then whether the rendering engine applies styles to that tag. Since it would make it more difficult to develop/maintain, CSS engines are not written to understand that "This is an HTML document so here are the list of valid tags / elements / types." CSS engines simply find tags / elements / types and then tell the rendering engine, "Here are the styles you should apply." Whether or not the rendering engine decides to actually apply the styles is up it.
这里有一个简单的方法来考虑从引擎到引擎的基本流程:解析器-> CSS ->渲染。实际上,它要复杂得多,但这对于初学者来说已经足够好了。
这个答案已经太长了,所以我就到此为止。
虽然浏览器通常会将CSS与HTML标记关联起来,不管它们是否有效,但你绝对不应该这样做。
从CSS的角度来看,这在技术上没有什么问题。然而,在HTML中绝对不应该使用编造的标签。
HTML是一种标记语言,这意味着每个标记对应于特定类型的信息。
您创建的标记不对应于任何类型的信息。这将产生来自网络爬虫的问题,如谷歌。
阅读有关正确标记重要性的更多信息。
Edit
div指的是多个相关元素的组,意味着以块形式显示,并可以这样操作。
span指的是与它们当前所在的上下文样式不同的元素,它们应该内联显示,而不是作为块显示。一个例子是句子中的几个单词需要全部大写。
自定义标记与任何标准都不相关,因此span/div应该与class/ID属性一起使用。
有一些非常特殊的例外情况,比如Angular JS
其他人提出了很好的观点,但值得注意的是,如果你看看像AngularJS这样的框架,自定义元素和属性是非常有效的。它们不仅向xml传递更好的语义含义,而且还可以为web页面提供行为、外观和感觉。
从早期开始,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>