我有一个组件,我想风格/主题的基础上的属性。根据属性值的不同,我想导入一个不同的stylesheet/css模块。
理想情况下,它应该是这样的
import module1 from 'css-module1.js'
import module2 from 'css-module2.js'
@customElement('component')
export class Component extends LitElement {
static styles = attribute ? [module1] : [module2]
@property({reflect: true})
attribute = <value>
<rest of file>
}
我所看到的一切都表明基于动态属性的css只适用于
static styles = css`
:host([attribute]) { <css> }
`
是否可以基于属性动态指定样式?样式表太大,实际上无法在文件本身中放置多个基于属性的副本。
1条答案
按热度按时间qxgroojn1#
这个问题可以通过使用www.example.com样式文档中的技术来解决lit.dev。
您的示例会导致每个类评估一次样式。这是一种高性能解决方案。但是,您所描述的情况需要根据属性更改样式,该属性可以每个组件示例不同。
因此,以下选项可用:
在Lit模板中添加
<style>
元素注意:在元素中计算表达式效率很低。当元素中的任何文本发生更改时,浏览器必须重新解析整个元素,从而导致不必要的工作。
性能成本可以通过只应用
<style>
元素中更改的样式来降低。例如:使用
styleMap
或classMap
使样式动态化的另一种方法是向模板中的
class
或style
属性添加表达式,classMap
和styleMap
可用于根据条件(如this.attribute
值)轻松应用类或样式。阅读更多关于他们:https://lit.dev/docs/components/styles/#dynamic-classes-and-styles
这可能需要更改从
css-module.js
导入的内容。