标签: web-component

我如何为 stenciljs web 组件添加通用 css

我正在创建一堆 Web 组件,不知道如何为 stenciljs Web 组件创建通用 css。根据文档我可以添加globalStyle: 'src/global/app.css',但似乎我只能共享 css 变量。例如

:root {
   --font_color: #484848;
   --bg_color--light: #f9f9f9;
}
Run Code Online (Sandbox Code Playgroud)

如果我想为按钮使用通用的基本 CSS,例如

button {
  border-radius: 5px;
  padding: 2px 10px;
}
Run Code Online (Sandbox Code Playgroud)

我想在所有组件中分享| 不知道如何实现这一目标。预先感谢您的建议。

css sass web-component stenciljs

3
推荐指数
1
解决办法
1201
查看次数

将 Lit 与 Javascript 结合使用,无需构建工具

我正在构建一个桌面应用程序,用于监视某些事物并生成有关其正在监视的内容的数据。当用户想要与数据交互时,应用程序会启动一个非常简单的网络服务器。服务器提供静态页面并具有基本的 http API 来提供数据。我使用 html 作为通用 UI,用户使用浏览器查看数据并与之交互。

我想使用 Google 的 Lit 2 将我的 html/css/js 重写为基于组件的 Web 应用程序。我喜欢纯 Web 组件的想法,但我注意到 Lit 提供了一些很棒的附加功能。毫不奇怪,大多数 Lit 文档都面向具有构建步骤的更传统的 Web 环境。我想看看是否可以让我的服务器尽可能简单并避免传统的后端工具(打字稿编译、缩小等)。我想用一系列简单的 js 文件中的 Lit 组件替换当前的静态 html/css/js。

目前,我的服务器从“公共”目录为我的页面提供服务,并具有最小的 http API:

- public/
 -- js/
 -- css/
 -- index.html
Run Code Online (Sandbox Code Playgroud)

我应该如何在没有构建步骤的系统中使用 Lit?我需要与我自己的继承自 LitElement 的 javascript 类一起提供的最小 Lit 文件集是多少?

web-component lit-element lit-html lit

3
推荐指数
1
解决办法
3384
查看次数

JavaScript:引用匿名类静态变量

遵循有关 Web 组件的 google 教程,我喜欢作者在customElements.define函数调用中使用匿名类的方式,因为它在创建立即调用的函数调用时避免了更多括号。

我使用静态类变量来存储模板元素,因此每次实例化自定义标记时都不会查询它。

问题是connectedCallback我不知道如何引用类名,因为它是一个匿名函数。在 python 中可以type(self),但我的研究表明,typeof this由于原型魔法,这在 JS 中不起作用。

window.customElements.define('my-uploader', class extends HTMLElement {
    static template = document.getElementById("TEMPLATE_UPLOADER");

    constructor() {
        super(); // always call super() first
    }

    /** Custom Component Reactions **/
    connectedCallback() {
        let shadowRoot = this.attachShadow({mode: "open"});
        shadowRoot.appendChild(document.importNode(ANONYMOUS_NAME.template, true));  // <--- How to refer to the class name here?
    }
Run Code Online (Sandbox Code Playgroud)

如何引用ANONYMOUS_NAME中的类' connectedCallback

javascript web-component

3
推荐指数
1
解决办法
894
查看次数

使用 vaadin 的 Web 组件和使用 svelte 的 rollup:主按钮忽略主题属性

也许有人以前尝试过这个并且能够给我一个提示。我使用了正常的 svelte 设置(在主页中提到)来构建应用程序;

npx degit sveltejs/template my-svelte-project

我想在 Svelte 中使用 vaadin Web 组件。我已经安装了;

npm install @vaadin/vaadin

main.ts的代码:

<script lang="ts">
    import '@vaadin/button/theme/material'

</script>

<main>
    <vaadin-button theme="primary">Primary</vaadin-button>
    <vaadin-button theme="secondary">Sec</vaadin-button>
</main>

<style>
    main {
        text-align: center;
        padding: 1em;
        max-width: 240px;
        margin: 0 auto;
    }

    @media (min-width: 640px) {
        main {
            max-width: none;
        }
    }
</style>
Run Code Online (Sandbox Code Playgroud)

事实是它几乎可以工作:)按钮是有样式的,我可以点击它们但是......主题被忽略;

在此输入图像描述

主要应该有一个背景颜色,如文档中所述; https://vaadin.com/docs/latest/ds/components/button/#styles

任何想法???

rollup vaadin web-component svelte

3
推荐指数
1
解决办法
494
查看次数

扩展 HTMLSpanElement 时“未捕获类型错误:非法构造函数。”

我得到一个Uncaught TypeError: Illegal constructor.基本上空的构造函数:

export class Citation extends HTMLSpanElement {
  constructor() {
    super();
  }
}
Run Code Online (Sandbox Code Playgroud)

这个有用的答案中的评论声称

我在使用 Web 组件时遇到了同样的错误,但仅限于 Safari(不是 Firefox)。原因是我做了一个 UserAvatar 类扩展 HTMLSpanElement (而不是 HTMLElement)

这让我尝试了一下HTMLElement,这实际上消除了错误。所以现在我想知道。我可以扩展哪些 HTML 元素?为什么我不能扩展span元素?还有几个类似的问题:Uncaught TypeError: Illegal constructor whenextending HTMLButtonElementHow to create new instance of an Extended Class of Custom elements。但它们有点旧,在这个答案中声称这应该从 2018 年 10 月开始工作。我使用的是最新的 Firefox 浏览器,所以我很困惑......

有人知道发生了什么事吗?

javascript web-component

3
推荐指数
1
解决办法
3345
查看次数

使用 CSS Exportparts 导出多个部件

我有一个嵌套在其他 Web 组件内部的 Web 组件,并且我正在为我的组件开发主题解决方案。我需要一种导出多个零件的方法,但我尝试做的事情不起作用,并且当我尝试导出多个零件时,样式不会应用。

结构如下:

<my-component>
  <other-component exportparts="theme-btn theme-dropdown"/>
</my-component>
Run Code Online (Sandbox Code Playgroud)

然后在我的 CSS 中:

my-component::part(theme-btn) {
  background-color: tomato;
}
Run Code Online (Sandbox Code Playgroud)

没有应用任何样式。但是,当我只导出这样的一部分时:exportparts="theme-btn"other-component可以工作并应用样式。我哪里出错了?

css web-component

3
推荐指数
1
解决办法
1169
查看次数

是否可以在不使用类的情况下创建 Web 组件?

如果 JavaScript 中的一切都来自原型,我想有某种方法可以在不使用类的情况下创建 Web 组件。我从未找到任何有关它的文章,我不知道这是因为这是一种不好的做法还是因为它不可能。

javascript web-component

3
推荐指数
1
解决办法
707
查看次数

有没有办法让 SvelteKit 组件拥有相应的端点文件?

我有一个 SvelteKit 组件,需要对应的+page.server.tscookie 验证表单操作。我的目标是拥有一个带有相应删除按钮的组件,该组件将从端点内的表单操作中向我的后端发送 API 请求+page.server.ts

为了清楚起见,我的结构:

- src/
    - components/
        - Component/
            - +page.svelte
            - +page.server.ts
    - routes/
        - route/
            - +page.svelte
Run Code Online (Sandbox Code Playgroud)

组件+page.svelte:

<div class="card">
    <form method="POST">
        <input type="hidden" value="{uuid}" name="uuid" />
        <button class="btn-icon variant-filled-primary">
            <span><Icon icon="material-symbols:delete-outline"></Icon></span>
        </button>
    </form>
</div>
Run Code Online (Sandbox Code Playgroud)

组件+page.server.ts:

import type { Actions } from './$types';
 
export const actions = {
  default: async ({ cookies, request }) => {
    // Doing some http-only Cookie authenticated fetching and data processing here
  }
} satisfies …
Run Code Online (Sandbox Code Playgroud)

forms endpoint web-component svelte sveltekit

3
推荐指数
1
解决办法
1236
查看次数

Polymer 1.0中使用的内容元素是什么?

https://www.polymer-project.org/1.0/docs/devguide/local-dom#dom-distribution

在"Dom Distribution"下的上述链接中,它说:

为了支持元素的轻DOM与其本地DOM的组合,Polymer支持该<content>元素....

只是想知道这是否过时了?Polymer 1.0是否使用此处所述的插槽?

https://developers.google.com/web/fundamentals/primers/shadowdom/?hl=en#composition_slot

web-component polymer polymer-1.0

2
推荐指数
1
解决办法
528
查看次数

Web组件Polyfill无法正常工作

我正在尝试按照https://www.webcomponents.org/polyfills/中的解释来填充web组件,因为我希望我的示例应用程序可以在Chrome和Firefox上运行.但是我得到了ReferenceError:Firefox中没有定义customElements错误.请参阅下面的index.html代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta name="robots" content="index, follow">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
    <meta http-equiv="x-ua-compatible" content="ie=edge">
    <title>Sample</title>
    <link rel="stylesheet" href="css/site.css">
    <!-- Components -->
    <link rel="import" href="components/global/site-navigation.html">
</head>

<body>
    <script>
        (function () {
            if ('registerElement' in document
                && 'import' in document.createElement('link')
                && 'content' in document.createElement('template')) {
                // platform is good!
            } else {
                // polyfill the platform!
                var e = document.createElement('script');
                e.src = 'js/webcomponents.js';
                document.body.appendChild(e);
            }
        })();
    </script>
    <site-navigation></site-navigation>
</body>    
</html>
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

PS:Chrome中一切正常(有/无填充)

javascript web-component polyfills shadow-dom html-imports

2
推荐指数
1
解决办法
1016
查看次数