web-component 相关问题

Web组件是使用本机代码或第三方库创建的可重用客户端元素。

如何使用影子 DOM 附加样式表根据子节点选择器设置自定义 HTML 元素的样式?

我有一个自定义 HTML 元素,可以对按钮元素进行分组: 福 酒吧 巴兹 &...

回答 1 投票 0

仅使用CSS选择shadow-root中的元素

有什么方法可以在不使用JS的情况下更改shadow-root中的CSS吗?我的意思是仅CSS。我浏览了一些东西,但找不到一种没有 js 的方法。 假设我们有代码 有什么方法可以在不使用 JS 的情况下更改 Shadow-root 中的 CSS 我的意思是仅 CSS。我浏览了一些东西,但找不到一种没有 js 的方法。 假设我们有代码 <div id="parent"> #shadow-root (open) <div id="child"> </div> </div> 如何仅使用 CSS 访问子元素? 仅当组件作者明确允许在影子 DOM 中的元素上使用 part 属性时。在这种情况下,您可以使用 ::part 伪元素选择器: 将 CSS 应用于该元素 这是一个例子: customElements.define('foo-bar', class extends HTMLElement { constructor() { super(); this.attachShadow({mode: 'open'}) this.shadowRoot.innerHTML = '<p part="baz">foo-bar here</p>'; } }); ::part(baz) { background-color: red; } <foo-bar></foo-bar> 请注意,您不能执行类似 ::part(foo) + .internal-css-class {...} 的操作(::part 不能成为复合选择器的一部分)。 除此之外,您始终可以使用CSS的继承属性,这些属性也会影响shadow DOM。例如。将 Web 组件放入 <h1> 将影响其字体大小和粗细(除非它专门为这些属性定义了自己的值)。

回答 1 投票 0

如何使用 Angular 库管理 Angular 元素?

我正在开发一个 Angular 17 项目,并且拥有一个带有设计系统库的 Angular 工作区。我的目标是将这个库中的一些 Angular 组件转换为 Web 组件,使它们可用...

回答 1 投票 0

如何在shadow dom中使用全局css样式

Shadow dom 封装了 css 样式,选择器不会跨越阴影边界。 问题:如何在shadow dom中使用全局通用的css样式? (假设有一些常见的CSS样式......

回答 7 投票 0

使用支持 Shadow DOM 的纯 JavaScript 模拟 Tab 键按下

注意:这里和其他地方都存在现有问题,但它们都是特定于 jQuery 的,并且没有涵盖纯 JavaScript 的规范答案,包括对 Web 组件的支持。 我想模拟...

回答 1 投票 0

自主自定义元素中是否可以有一个“<li>”,而父元素“<ul>”不在同一个 ShadowDOM 中?

我过去的理解是,列表项 标签必须是 、 或 标签的直接子代。 但我一直在使用 Web 组件和自主自定义 elem... 我过去的理解是,列表项 <li> 标签必须是 <ul>、<ol> 或 <menu> 标签的直接子代。 但我最近一直在使用 Web 组件和自主自定义元素。我读到,对于自主自定义元素,内容模型是透明的。请参阅https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-core-concepts 我想要一个自主自定义元素 <my-list>,其 ShadowDOM 中有一个 <ul>(或其他有效父元素之一,例如 ol 和 menu),以及第二个自主自定义元素 <my-list-item> ShadowDOM 中有一个 <li>。 (参见下面的“示例”。) 为什么?几个原因: CSS 样式范围仅限于 ShadowDOM 额外的事件处理程序 某些用例可能会发生更多情况,例如每个 <li> 除了 <slot> 之外还包含 ShadowDOM 子级 我使用的是 Lit 3,所以很自然地编写一个 Web 组件 根据 HTML 5 规范和辅助功能指南,类似下面这个示例的内容是有效还是无效? 注意:我使用 <template shadowrootmode="open"> (参见此处 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/template#shadowrootmode )使我的示例更加独立。在我的实际代码中,我使用 Lit 框架,它以编程方式创建 ShadowDOM。 示例: <my-list role="presentation"> <template shadowrootmode="open"> <ul> <slot /> </ul> </template> <my-list-item role="presentation"> <template shadowrootmode="open"> <li> <slot /> </li> </template> My text here </my-list-item> </my-list> 我认为这可能有效的另一个原因是我看到 axe-core 有一个看起来相似的单元测试: https://github.com/dequelabs/axe-core/blob/develop/test/checks/lists/only-listitems.js#L224-L232 it('should return false in a shadow DOM pass', () => { const node = document.createElement('div'); node.innerHTML = '<li>My list item </li>'; const shadow = node.attachShadow({ mode: 'open' }); shadow.innerHTML = '<ul><slot></slot></ul>'; const checkArgs = checkSetup(node, 'ul'); assert.isFalse(checkEvaluate.apply(checkContext, checkArgs)); }); 但看起来这是 axe-core 中的特定模式/选项,而不是默认行为? 在理论上,你所说的都是有道理的。这意味着以下事情是正确的: 自定义元素具有符合规范的透明内容模型。 根据规范,当透明元素相互嵌套时,必须迭代应用该过程。 因此,这意味着您应该被允许创建完全自定义的列表。所以,这应该有效: <script> class MyList extends HTMLElement { constructor() { super(); this.attachShadow({mode: 'open'}); this.shadowRoot.innerHTML = ` <ul aria-label="Custom List"> <slot></slot> </ul> `; } } class MyListItem extends HTMLElement { constructor() { super(); this.attachShadow({mode: 'open'}); this.shadowRoot.innerHTML = ` <li> <slot></slot> </li> `; } } customElements.define('my-list', MyList); customElements.define('my-list-item', MyListItem); </script> <my-list aria-label="Custom Wrapper"> <my-list-item>Item 1</my-list-item> <my-list-item>Item 2</my-list-item> </my-list> 在这种情况下,<ul> 的影子根与 <li> 元素的影子根不同。对于上述定义,浏览器最终会生成以下可访问性树(来自 Chrome 浏览器): 因此,根据规范,浏览器正确生成了大多数工具应该看到的可访问性树。我最好的猜测是,axe-core 在此给定测试中依赖相同的规格。但在实践中,情况有所不同。 许多辅助工具都有自定义解析器,这会破坏和/或对 HTML 结构做出假设(ShadowRoot 是一个常见的障碍) 甚至W3C 验证器也无法识别自定义元素。 尽管自定义元素规范正式考虑具有透明内容模型的自定义元素,但 <ul> 和 <ol> 的规范仍然明确限制它们仅具有 <li>、<script> 和 <template>。 (将来应该解决这个问题)。 因此,根据规范,您最好在完全不同的 Shadow DOM 中的自定义列表中拥有自定义列表元素,但实际上,可访问性仍然会受到影响。如果可能,最好依赖经典的 ul > li 或 ol > li 层次结构。

回答 1 投票 0

自定义元素设置:构造函数与connectedCallback

我是 Web 组件的新手,我注意到一些示例在自定义元素的构造函数中设置 dom,而其他示例则在connectedCallback 中设置 dom。 因为两者似乎都工作正常(虽然我只尝试过

回答 1 投票 0

使用 Bootstrap 设置自定义元素 ShadowDOM 样式不起作用

我尝试使用shadowDom及其样式(即bootsrap)创建自定义元素导航栏。我使用 NPM 安装了引导程序。然后我在 style.scss 中导入了 bootstrap 并获取了导航栏

回答 1 投票 0

Vite/Rollup 插件:如何将样式(CSS 模块)添加到 React Web 组件中

我正在尝试从 React 创建一个 Web 组件。 Web 组件需要您在 Shadow DOM 中导入样式。所以虽然我的 CSS 模块通常是这样导入的 从“./MyCom...

回答 1 投票 0

在原生Web组件中使用传单

我正在尝试在网络组件内使用传单。这是我的代码。 我已将标准示例复制粘贴到传单网站上,但给它一个 HTMLElement 而不是 id 字符串。 类 InfoWithMap

回答 1 投票 0

为什么我的自定义元素没有被垃圾收集?

考虑一个网页,其中包含一个触发模式打开的按钮: 打开模态 const 触发器 = document.querySelector(`屁股...

回答 2 投票 0

Vite 可以在 URL 上提供最新的编译源吗?

我有一个 vite 项目,它为一个带有 Web 组件的小型 Web 应用程序提供服务。 由于某些技术原因,我希望能够点击 URL 并让 vite 为我提供源文件的最新版本...

回答 1 投票 0

Storybook Web 组件:将数组作为组件属性发送

我正在使用 Storybook 6.5.9 渲染 Web 组件(用 Stencil 制作)。我有几个可以正常工作,但现在我正在为一个新组件创建一个故事,该组件可以接收...

回答 3 投票 0

Web 组件 Light DOM 槽相当于将动态内容注入特定元素

我正在努力做一些看起来应该很简单的事情。我正在创建我的第一个 Web 组件,它不能位于 ShadowDOM 内。我需要它来接收一些动态内容并注入我...

回答 1 投票 0

使用 Web 组件时无法解析模块说明符

我已经从 NPM 安装了 @tokens-studio/configurator 包。但是,当我按照建议导入它时,出现错误: 无法解析模块说明符“@tokens-studio/configurator”。

回答 1 投票 0

Angular 模块与 Web 组件的联合:如何共享 Ngrx 存储?

几个月前,我开始了一个使用模块联合与 Web 组件的大项目,如 https://www.angulararchitects.io/en/aktuelles/multi-framework-and-version-micro-frontends-with-module- 中所述

回答 1 投票 0

将 Stenciljs Web 组件库与 Svelte 结合使用

我一直在努力弄清楚如何将我的 StencilJS Web 组件库与 Svelte 一起使用。以下是我能想到的最好的。哪个有效,但我想知道这是否是“正确的”wa...

回答 1 投票 0

在WebComponents中使用槽而不使用shadow DOM

我正在尝试在不使用 ShadowDOM 的情况下构建一个 WebComponent - 到目前为止它大部分都可以工作,但现在我想构建一个包装其他组件的组件,就像使用 Angular 的 @ViewChil 所做的那样...

回答 1 投票 0

将完整的 Angular 应用程序转换为 WebComponent

我有一个完整的 Angular 16 应用程序,包含路由、多个组件和服务,我需要将其转换为单个 Web 组件,可以通过外部 UI 中的脚本标签加载

回答 1 投票 0

空鞋带选择在 Svelte 中采用双向绑定

在 Svelte 中更改相关鞋带选择之间的选项时,我无法清空先前的选择。我尝试强制 Shoelace 选择值,但它不起作用,也许我不应该使用双向绑定或

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.