【发布时间】:2020-06-10 09:16:52
【问题描述】:
我用 Svelte 编写了一个聊天机器人小部件,它应该可以集成到网站中。网站所有者获取编译后的 JS 和 CSS 文件。到目前为止一切顺利。
但是每个网站所有者都必须能够覆盖 CSS 文件中的样式。没问题,例如,他可以简单地覆盖标题的背景颜色:
.chat-widget.svelte-kcmu8l header.svelte-kcmu8l {
background-color: #fff;
}
但是: 例如,假设我修复了一个错误并重新编译了小部件。让我们进一步假设我的更改导致哈希 kcmu8l 发生更改,并且网站所有者之前所做的调整不再起作用。
如何防止这种情况发生?是否可以省略svelte-xxx 类或定义自己的哈希值?
【问题讨论】:
-
为了选择正确的元素,您可以或不能在此处省略哪些内容,取决于 HTML 结构。可以只有一个
.chat-widget元素吗?里面只有一个header?那么它不应该在任何一个地方都需要特定的svelte-*类。 (您可能需要增加规则的特异性,但是当这些类被从中删除时,如果您不想使用 !important,仍然能够覆盖颜色。)跨度> -
(您也可以通过属性选择器进行部分类匹配。)
-
谢谢@CBroe。特异性和独特的类名为我做这件事。
-
请检查 github.com/sveltejs/svelte/issues/2900#issuecomment-701644971 搜索此行 this.id =
svelte-${hash(ast.css.content.styles)}并更改。