整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS 伪元素:用来创建文档树之外的抽象元素

CSS 伪元素:用来创建文档树之外的抽象元素

么是伪元素

让我们先看看W3的伪元素官方定义:

伪元素用来创建HTML文档语言指定之外文档树的抽象层。比如HTML没有提供文档元素内容的首字母或第一行的访问机制。CSS伪元素允许作者引用这些除此之外无法访问的信息。伪元素还提供一种方法来引用不存在于文档中的内容。(比如,::before 和 ::after )。

一个伪元素由2个冒号(::)加上伪元素的名字所定义。

:: 标记是CSS2.1新规范中引入的,用来区分伪类(pseudo-classes)和伪元素(pseudo-elements)。但出于现有样式表兼容性原因,用户代理必须也能支持CSS1和CSS2中引入的单冒号伪元素标记(也就是说,:first-line, :first-letter, :before 和 :after)。但是CSS2.1及以后版本新引入的伪元素不支持这种兼容语法。

每个选择器中只能出现一个伪元素,并且只能出现在选择器主体的后面。

注意:后续版本可能会允许每个选择器中出现多个伪元素。

从上面的定义,我们可以得知伪元素事实上创建了一个虚拟的元素,在这个虚拟元素上可以应用一般CSS规则乃至伪类选择器。伪元素并不选定(过滤)元素,实际上它们选定(过滤)内容(::first-line,::first-letter)或创建内容(::before,::after,然后包装到一个虚拟容器中,作者可以为此容器添加样式。

尽管理论上使用JavaScript也可以获取第一行文本或第一个字母,但这高度依赖于当前使用的字体家族、字体大小、元素宽度,浮动元素等各种因素,显得相当繁琐。而通过CSS伪元素我们可以方便获得。文章最后提供了示例的访问地址。

伪元素的实例

例1 - 使用伪元素给文字自动添加语言说明后缀

CSS代码如下:

div:lang(zh){color:lime;background:#ff0;}

:lang(en) > span{color:#3111d3;}

HTML代码如下:

效果图如下:

  • 本例使用伪类:lang来过滤lang属性为特定值(如en-us)的元素。

  • 使用伪元素::after来给元素(文本)自动添加语言说明后缀。

通过本例,可以对伪类和伪元素的不同作用有个直观的认识。

例2 - 使用伪元素实现首行着色和段落投影

CSS代码如下:

HTML代码如下:

效果图如下:

  • 本例使用伪类:lang来过滤lang属性为特定值(如en-us)的元素。

  • 使用伪元素::after来给元素(文本)自动添加语言说明后缀。

例3 - 使用伪元素实现圆环图形

CSS代码如下:

HTML代码比较简单,就一行即可,如下:

<div class="circle"></div>

效果图如下:

注:伪元素默认是inline样式的,通过设置成绝对定位,可强制改变display为block,这样对其设置宽高才能生效。

本例使用伪类:after来实现内圆。

伪类和伪元素的区别

本头条号前面一篇文章《CSS 伪类:用来增强CSS选择器》和本篇文章内容分别讲述了伪类和伪元素的使用,我们应该已经大致理解了两者的异同点,这里再总结一下:

两者都不存在于HTML文档树中,都是为了支持依靠文档树之外的信息来进行格式化。

出于历史兼容性原因,一些在CSS2.1规范之前引入的伪元素使用和伪类一样的语法标记(单冒号:)。

伪类本质上和类相同,是用来选择过滤HTML元素的。只不过伪类是按动态特征过滤,而不是名称、属性或内容。

伪元素本质上和元素相同,是已有元素的某个部分或新创建的补充元素。伪元素上可以应用伪类选择器来过滤。

伪类可以出现在选择器的任何地方,而伪元素只能添加在最后一个简单选择器之后。

附:本文示例的网址:http://www.ikinsoft.com/3ddemo/pseudoelem.html

unction toNodeTree(objects, rootId) {

let nodes=[];

for (let object of objects) {

if (object.parentId===rootId) {

for (let leaf of objects) {

if (leaf.parentId===object.id) {

object.children=toNodeTree(objects, object.id);

break;

}

}

nodes.push(object);

}

}

return nodes;

}


及时解决工作难点,提高工作效率,排除工作困扰,提供信手拈来的精要代码。

文转载自公众号“把科学带回家”(ID:steamforkids)



撰文 | 阿娴
审校|Ziv
在我们广袤的地球上,大约有“三兆”棵树,精确来说是3 040 000 000 000棵,比地球上所有的人加起来都多。而在这些树中,一些长寿的树木竟然能活上千年之久。最古老的树是什么样子的?和现在我们看到的树的形态有什么区别吗?

老吉科树是世界上最古老的挪威云杉,生长在瑞典的菲吕山上。它的根系已有9565岁,但是新生的树干却非常年轻,只活了几百年。|wiki

这个问题困扰科学家很多年了,因为现有的化石记录中,树木通常只会保留树干,无法保留叶子,因而无法显示树冠和树的整体形状可能是什么样子。
不过近期(2024年2月2日),Current Biology发表了一篇题为“Enigmatic fossil plants with three-dimensional, arborescent-growth architecture from the earliest Carboniferous of New Brunswick, Canada”的论文,该文章详细描述了研究人员在加拿大新不伦瑞克省的一个采石场中发现的5块被3.5亿年前的地震活埋的树木化石,这些化石上保留着清晰可见的树枝和冠叶,还具有令人惊讶且独特的三维树冠形状。

这块树木化石被包裹在一块砂岩巨石中,约有一辆小汽车那么大。|参考文献3
研究人员指出,其3D树冠结构可以让人们了解树冠在树木进化早期的样子。该研究的主要作者、缅因州沃特维尔科尔比学院(Colby College)地质学教授罗伯特·加斯塔尔多(Robert Gastaldo)说,大多数古树标本都相对较小,并且通常以带有树桩或根系的化石树干的形式被发现。当他和同事们发现一棵保存完好的树木化石,并粗略估算该树成熟时可能有4.5米高,树冠直径为5.5米时,他们都“目瞪口呆”了。
目前还没有足够的证据来确定这棵树是否属于蕨类植物,或者地球历史上其他未知的植物家族。所以研究人员选择将它命名为“Sanfordiacaulis densifolia”,属名源自劳里·桑福德(Laurie Sanford),她是出土该树木化石的采石场的所有者;其具体名称densifolia则源自叶子的密集排列。

生长于大约 3.5 亿年前,有一个细长的树干,顶部有许多长叶子。|参考文献6

研究人员认为这个3.5亿年前植物的形态,看起来有点像现代的蕨类植物或棕榈树,不过,我们所知的蕨类植物或棕榈树的顶部叶子都很少,比如树蕨(Alsophila spinulosa)的树冠上一般有15~20片叶子,它的巨大叶片螺旋排列于树干顶端,像一把绿色的大伞棕榈树也有类似数量的叶子。当一片或多片叶子停止光合作用时,它们要么从树干上脱落,要么以“裙子”的方式环绕在树干上,免受大型附生植物、半附生植物和攀缘植物的损害
而新发现的化石中,最完整的标本的树干周围有250多片叶子,拥挤不堪,每片叶子都支棱着向外延伸,大约1.7米,环绕着直径只有16厘米的树干

枯叶向下翻折,就变成了树的“裙子”。|参考资料5

加斯塔尔多说,对于普通公众来说,这棵名为Sanfordiacaulis densifolia的树可能看起来像一个非常庞大的“家用马桶刷”
这棵树之所以长成这种模样,和它的较小体形和生活时期有关。Sanfordiacaulis densifolia生长在亚冠层(也就是地面植物和较高树木之间),所处的位置非常尴尬。为了最大程度地吸收光线,并减少与地面上其他植物的竞争,它需要浓密排列叶片,并横向延伸出去。

该图像显示了该树之前和之后发现的不同植物化石的树高。|参考资料6

其次,地球上第一批树木被认为出现在泥盆纪(约4.19亿至3.59亿年前),而Sanfordiacaulis densifolia可以追溯到石炭纪(约3.59亿至2.99亿年前)——也就是第一批树木出现的后期。这一时期的植物生命比预期的更加复杂,因为那时候的植物正在“实验”各种生长的可能形式或结构,很显然这种“马桶刷”结构并没有机会持续下去。
那么,这块化石为什么能保存的如此完好?研究人员认为,这块化石所在的砂岩来自一个非常长的古老湖泊的底部,该湖泊非常深,湖中发生了灾难性的地震,引发了山体滑坡,继而使其保存了下来。“地震发生时这些树还活着,它们很快就被埋在湖底,”新不伦瑞克博物馆地质学和古生物学助理馆长史汀生说。

桑福德采石场周围暴露的上泥盆统-下石炭统地层地质图。|参考资料6
宾夕法尼亚州立大学地球科学教授兼古植物学家彼得·威尔夫(Peter Wilf)表示,发现完整的树木化石非常罕见,而且比发现完整的恐龙化石要难得多它提醒着我们,在地球生命的历史上,曾经存在过一些看起来与我们见过的树木完全不同的树木。
对过去和未来的想象不妨再大胆一点!!

参考资料:

[1]https://www.science.org/content/article/rare-fossil-reveals-glimpse-early-weird-looking-trees

[2]https://www.sciencedaily.com/releases/2024/02/240202114758.htm
[3]https://www.sci.news/paleontology/sanfordiacaulis-densifolia-12656.html
[4]https://www.sci.news/paleontology/sanfordiacaulis-densifolia-12656.html
[5]https://www.researchgate.net/figure/Seedling-of-Coprosma-autumnalis-Rubiaceae-growing-from-beneath-the-dense-skirt-of-a-25_fig1_350187729
[6]https://www.cell.com/current-biology/fulltext/S0960-9822(24)00011-3

转载内容仅代表作者观点

不代表中科院地质地球所立场

如需转载请联系原公众号