- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑这段代码:
//js
class FooBar extends HTMLElement {
constructor(){
super();
}
}
customElements.define('foo-bar', FooBar);
<!-- html -->
<foo-bar>
<h1>Test</h1>
</foo-bar>
constructor () {
super();
this.shadow = this.attachShadow({ mode: 'open' })
}
constructor () {
super();
this.shadow = this.attachShadow({ mode: 'open' });
this.shadow.appendChild(document.createElement('slot'));
}
<foo-bar>
的所有子节点都有一个默认槽。
<slot />
,子节点会发生什么?影根之内。它们仍然出现在
this.children
中及其
style.display
属性(property)遗存
""
.所以它们在dom内,但没有渲染,即使你的css告诉相反的?这里到底发生了什么?
最佳答案
完整的详细解释在:::slotted CSS selector for nested children in shadowDOM slot
<foo-bar>
<h1>Test</h1>
</foo-bar>
H1 是
lightDOM ,
appendChild
明确地移动它(或任何 DOM 移动操作)this.querySelector("span").innerHTML="weird";
但引用
shadowDOM 与
this.shadowRoot.querySelector("span").innerHTML="weird";
是否
不是 工作,因为 DIV(里面有 SPAN)是
黑盒 在
<template id="MY-ELEMENT">
<style>
:host {
display: inline-block;
font-family: Arial;
}
::slotted(div){
color:blue;
}
::slotted(span){
color:gold; /* alas, you can style the 'box', not elements inside */
}
</style>
<h3><slot></slot></h3>
</template>
<style>
span {
background:lightcoral; /* from global/host CSS, style slotted content lightDOM */
}
</style>
<script>
customElements.define('my-element', class extends HTMLElement {
constructor() {
super().attachShadow({mode: 'open'})
.append(document.getElementById(this.nodeName).content.cloneNode(true));
}
});
</script>
<my-element>
<div>Hello <span>Component</span> World!</div>
</my-element>
So to shadowDOM, slotted content is a black-box of elements & styles;
reflected from lightDOM
that is why::slotted
can only style the box, and not what is inside.
<slot name=...>
您可以进行以前需要更多编码的交互(想想路线、选项卡、答案)(还记得那些 jQuery 显示/隐藏的日子吗?)
<template id="MY-ELEMENT">
Custom Element SLOTs are:
<slot name=answer></slot>
</template>
<style>
img { /* style all IMGs in lightDOM */
max-width: 100vw;
max-height: 70vh;
}
</style>
<script>
customElements.define('my-element', class extends HTMLElement {
connectedCallback() {
this.attachShadow({mode: 'open'})
.append(document.getElementById(this.nodeName).content.cloneNode(true));
this.onclick = (evt) => {
const answer = evt.composedPath()[0].innerText; // button label
this.shadowRoot.querySelector('slot').name = answer;
this.children[0].slot = answer;//include lightDOM buttons again
}
}
});
</script>
<my-element>
<span slot=answer><button>Cool</button><button><b>Awesome</b></button><button>Great</button></span>
<div slot=Cool><img src="https://i.imgur.com/VUOujQT.jpg"></div>
<span slot=Awesome> <h3>SUPER!</h3></span>
<div slot=Awesome><img src="https://i.imgur.com/y95Jq5x.jpg"></div>
<div slot=Great><img src="https://i.imgur.com/gUFZNQH.jpg"></div>
</my-element>
关于javascript - 如果没有 `<slot/>` 而是影子根,子节点会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61852233/
我正在学习 Vue.js,并且正在努力寻找一种组织代码的方法。我试图让一切尽可能模块化,所以在制作 slider 时我做了以下事情: export
我有一个像这样定义的 Web 组件自定义元素。 class Dropdown extends HT
我遇到了这样的崩溃: #0 0x90b05955 in __gnu_debug::_Safe_iterator_base::_M_detach #1 0x90b059ce in __gnu_deb
正如标题中所写 - “信号和插槽”是一种简单的响应式(Reactive)编程方式吗? 最佳答案 Signals/Slots是 Observer Pattern 的实现. 来自维基 Reactive P
我有一个关于太阳系行星列表的 intent 。 { "intent": "PlanetIntent", "slots": [ { "nam
我们的消费计划中有一个 Azure Function v3 实例,其中包括一个暂存槽以减少部署期间的停机时间。 我们的部署流程是: 将代码部署到暂存槽 启动暂存槽 将暂存槽与生产槽交换 停止暂存槽 我
我们的消费计划中有一个 Azure Function v3 实例,其中包括一个暂存槽以减少部署期间的停机时间。 我们的部署流程是: 将代码部署到暂存槽 启动暂存槽 将暂存槽与生产槽交换 停止暂存槽 我
我遇到一个同步组件 JavaScript 在实际显示之前加载的问题。 使用 dynamic-import 导入的组件在需要时使用 v-if 显示以加载它们。当它们被显示时,它们的 JavaScript
我有 6 个 subdag。它们中的每一个都包含一个带有 pool='crawler' 的任务。这需要大量资源,所以我创建了一个池 crawler只有 1 个插槽。 当我运行 DAG 时,似乎绕过了池
Vue 对象有一个非常有用的成员,叫做 $attrs。什么$attrs does 包含所有未被识别为当前组件 props 的属性。 $attrs 的一个很好的例子是 here . 我想知道 $scop
我有一个运行 Node.js 应用程序的 Azure Function App v3,该应用程序具有生产槽和阶段槽。使用在部署中心创建的操作将其部署到 GitHub。我有一项针对 prod 的部署操作
我有一个运行 Node.js 应用程序的 Azure Function App v3,该应用程序具有生产槽和阶段槽。使用在部署中心创建的操作将其部署到 GitHub。我有一项针对 prod 的部署操作
我有一个事件架构: owner: { type: Schema.Types.ObjectId, ref: 'User', required: true }, participa
我想测试这个FooComponent: 它是这样使用的(例如在 ParentComponent 中): 因此,我想测试我的组件对从 slot Prop 调用此“fn
我有一个意图,其中包含三个必需的插槽(我们称它们为:slot_a、slot_b、slot_c),所有类型都是 @系统编号。当检测到意图时,系统会提示我询问缺少的插槽: What's slot_a? 我
我有这个预订表结构 |ID|timeBooked | duration | |2 |2013-05-09 11:10:00| 30 | |1 |2013-05-09 14:
突然开始在所有 Azure App Services 中持续发生使用Deployment Slots . Error Message: "Failed swapping site. Error: Ca
我在我的azure应用程序服务中创建了多个插槽(测试、阶段和产品)。同样,我为每个环境创建了各自的 web.config 文件。我正在测试环境槽中通过 octopus 部署工具部署我的应用程序,因此最
所以我正在尝试使用 C++ 学习 Qt Framework。我正在了解信号和插槽,但我很难创建自定义插槽。因此,当我按照一些教程进行操作时,我的程序出现了以下错误: QObject::connec
如何引用 Vue.js 中的文本? Vue.component('component', { template: ``, created: function() { // i woul
我是一名优秀的程序员,十分优秀!