我对了解何时可以将::before
和::after
伪元素应用于自动关闭标签特别感兴趣。根据W3生成的内容CSS规范,这是这些伪元素的定义:
12.1:before和:after伪元素 :作者使用 :before和:after伪元素
指定生成内容的样式和位置。顾名思义,:before和:after伪元素指定元素的文档树内容之前和之后的内容位置。“
content”属性与这些伪元素一起指定了要插入的内容。
基于此,这些伪元素似乎旨在修改元素的内容。据我了解(尽管我找不到权威的资料来源来支持),“内容”或多或少地被定义为“开始和结束标记之间的内容”;因此,我认为没有“内容”的元素(例如HTML
br
标记)不应支持::before
和::after
伪元素。
对此进行推断,并根据我对元素“内容”定义的理解,我认为 没有
一个自动关闭标签会支持::before
和::after
伪元素。但是,在实践中,我发现许多自动关闭标签都具有完全支持。
除了定义为“内容”的问题之外,我们还可以考虑以下事实:伪元素表示为(尽管从技术上讲不是)伪元素所应用的元素的DOM子元素。自闭合标签不能具有DOM子代的事实似乎支持自闭合标签不应具有伪元素的想法。
在寻找该问题的答案的过程中,我进行了一个小型测试,以确定哪些自动关闭标签(在我想到它们时选择了其中的几个)::before
和::after
,并将该测试嵌入到了代码段中下面。我在浏览器中得到了截然不同的结果,并且几乎找不到一致性。
.test {
display: inline;
visibility: hidden;
}
span + *::after {
visibility: visible;
color: green;
content: 'YES';
}
<h3>Which Self-Closing Tags Support Pseudo Elements?</h3>
<div><span>Text Input:</span> <input type="text" class="test"></div>
<div><span>Checkbox Input:</span> <input type="checkbox" class="test"></div>
<div><span>Radio Input:</span> <input type="radio" class="test"></div>
<div><span>Submit Input:</span> <input type="submit" class="test"></div>
<div><span>Reset Input:</span> <input type="reset" class="test"></div>
<div><span>Button Input:</span> <input type="button" class="test"></div>
<div><span>Image:</span> <img class="test"></div>
<div><span>Line Break:</span> <br class="test"></div>
<div><span>Horizontal Rule:</span> <hr class="test"></div>
<div><span>Link:</span> <link class="test"></div>
<div><span>Meta:</span> <meta class="test"></div>
我对::before
和::after
规范的解释不正确吗?我对元素的“内容”的定义不正确吗?我正在寻找具有权威性答案的答案,这些答案解释了“完美的浏览器”如果完全按照W3
CSS规范结合自动关闭的HTML标签实现这些伪元素时会做什么。
编辑:关于“替换的元素”
我注意到“生成的内容规范”底部的一行显示:
注意。该规范并未完全定义:before和:after与替换元素(例如HTML中的IMG)的交互。这将在以后的规范中更详细地定义。
这可能与答案有关。根据此规范,“替换元素”定义为:
内容超出CSS格式模型范围的元素,例如图像,嵌入式文档或applet。例如,HTML IMG元素的内容通常被其“
src”属性指定的图像替换。替换元素通常具有固有尺寸:固有宽度,固有高度和固有比率。
在HTML规范中找不到替换元素的权威列表,但是我可以很容易地看到大多数(或全部)自动关闭标签都符合该定义。我也不确定第一注中提到的“未来规范”是否完整。
根据CSS 2.1规范,
该规范并未完全定义:before和:after与替换元素(例如HTML中的IMG)的交互。这将在以后的规范中更详细地定义。
但是当前的Selectors Level 3草案只说
:: before和:: after伪元素可用于描述元素内容之前或之后生成的内容。它们在CSS 2.1中有解释
CSS 2.1定义了如下替换元素:
内容超出CSS格式模型范围的元素,例如图像,嵌入式文档或applet。
CSS渲染模型中不考虑替换元素的内容。
根据MDN,
典型替换元素是
<img>
,<html" target="_blank">object>
,<video>
或类似形式的元件<textarea>
,<input>
。某些元素,例如<audio>
或
<canvas>
仅在特定情况下被替换的元素。
因此,使用:before
或:after
替换元素将产生不可靠的结果。
问题内容: 同一元素是否可以有多个伪元素? 我正在尝试使用jQuery将上述样式应用于相同的元素,但仅应用了最新样式,从未应用过这两种样式。 问题答案: 在CSS2.1中,一个元素在任何时候最多只能具有任何一种伪元素。(这意味着一个元素可以同时具有a 和一个伪元素- 每种元素不能超过一个。) 结果,当您有多个匹配同一元素的规则时,它们将全部层叠并应用于单个伪元素,就像普通元素一样。在您的示例中,最
问题内容: 我想使用一个开关在网页上放置段落标签。 我使用after伪元素: 现在,我需要从页面中删除此CSS代码。 如何轻松做到这一点? 我要补充一点: jQuery已在页面上使用 而且我不想包含或删除包含CSS的文件。 问题答案: p:after { content: none; } none 是将内容(如果指定)设置为 空 的官方值。
问题内容: 和之间有什么区别?我们什么时候必须使用完? 双冒号和单冒号表示法是区分伪类和伪元素。 以上声明的实际含义是什么? 问题答案: 伪类: CSS伪类是关键字,其前面带有一个冒号(:),并添加到选择器的末尾,以指定要对选定元素进行样式设置( 仅当它们处于特定状态时) 。例如,您可能只想在元素被鼠标指针悬停时设置样式,或者在元素被禁用或选中时选中一个复选框,或者是作为其父元素在DOM树中的第一
问题内容: 静态放置时,:: before伪元素堆栈(z-index)在孩子的内容之前,但在孩子的背景之后。谁能解释为什么甚至是怎么回事,或者这是所有主要浏览器都存在的问题吗? http://jsfiddle.net/funkyscript/ALrgf/ 问题答案: 的内容(包括两个伪元素和元素)参与相同的堆叠上下文(相对于)。正如您所注意到的,这是因为它们全部三个都是静态放置的。换句话说,根本没
问题内容: 我有一个:before开头的’quote’和一个:after结束的报价。 现在,我想要的是一个:after:after供“引用”参考,但我无法使其正常工作。 有人知道这是否可能吗? 到目前为止,我的代码: 问题答案: 已经提出了嵌套和伪元素的想法;请参阅“生成和替换的内容”模块的这一部分。但是,该模块已被放弃,等待完全重写,因此在重新发布该文档之前,我不会屏息。即便如此,嵌套内容伪元素
假设我有这样的html: 我只想获得之前的 。有没有办法用JSOUP做到这一点呢?我知道我可以把所有的宠物都弄成这样: 但这也包括额外的宠物。我想知道我是只能选择上面的宠物还是只是删除下面的宠物然后使用那个代码?