文档手册

微元素,标记,阴影 Pseudo Elements ::marker and ::shadow

2024-07-18 17:23:30

伪元素 ::marker 和 ::shadow

与标准 ::after::before 伪元素一起,Sciter 支持 ::marker:shadow 伪元素。

::marker::shadow 的主要区别在于它们应该用作与元素结合的块元素。这些元素被替换,就好像它们的容器使用 flow:stack layout 并且伪元素本身是 display:block 。因此,可以使用边距来定位它们:

div { 
size: 64px;
border:3px solid blue;
}
div::marker {
size:32px;
margin: 0 * * 0; /* attached to top-left corner */
background: rgba(255,0,0,0.5);
z-index:1; /* on top of content layer */
}

如果使用以下方法,则此类伪元素可以完全覆盖其主机元素:

div::marker { 
size:*; /* covers whole padding box */
background: rgba(255,0,0,0.5);
z-index:1; /* on top of content layer */
}

::shadow 并提供 ::marker 类似的功能。如果您需要从元素的 DOM 中增加两个层,则可以同时使用它们。

 影子 DOM

在某些情况下,您可能希望在主机文档的 DOM 之外设计具有非平凡内容的复合组件。我们可以为此使用 prototype 属性:

 CSS系统

div::shade { 
size:*; /* covers whole padding box */
prototype: MyShadow url(shadow.js);
}

shadow.js

class MyShadow extends Element {
componentDidMount() {
// note 'this' here is a shade pseudo element
this.content(<>
<h1>This is shadow DOM!</h1>
<div>
... some complex content ...
</div>
</>);
}
}

::shade 子元素的内容可以使用样式集单独设置样式:

 CSS系统

div::shade { 
style-set: MyShade;
}

@set MyShade {
:root { ... } /* style of ::shade itself */
:root:hover { ... } /* style of ::shade itself */
/*... other rules for children go here */
}