欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

基于屬性動態(tài)更新lit CSS模塊

錢斌斌2年前7瀏覽0評論

我有一個組件,我想基于一個屬性的樣式/主題。根據(jù)屬性值,我想導(dǎo)入不同的樣式表/css模塊。

理想情況下,它應(yīng)該是這樣的

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>
}

我看到的一切都表明基于動態(tài)屬性的css只適用于

static styles = css`
  :host([attribute]) { <css> }
`

可以根據(jù)屬性動態(tài)分配樣式嗎?樣式表太大,實際上無法將多個基于屬性的副本放入文件本身。

這個問題可以通過使用lit.dev styles文檔中的技術(shù)來解決。

您的示例顯示了每個類評估一次樣式的結(jié)果。這是一種高性能的解決方案。然而,您所描述的情況需要基于屬性來改變樣式,這對于組件的每個實例可能是不同的。

因此,以下選項可用:

包括一個& ltstyle & gtLit模板中的元素

render() {
  return html`
    <style>
      :host {
        /* Warning: this approach has limitations & performance issues! */
        color: ${myColor}
      }
    </style>
    <div>template content</div>
  `;
}

注意:在元素內(nèi)部計算一個表達(dá)式是低效的。當(dāng)元素中的任何文本發(fā)生變化時,瀏覽器必須重新解析整個元素,從而導(dǎo)致不必要的工作。

通過僅應(yīng)用在& ltstyle & gt元素。例如:

// Static styles that do not change between cases.
 static styles = css`/* ... */`;

 
  render() {
    const module1 = html`<style> :host { color: red; } </style>`;
    return html`${this.attribute ? module1 : module2}`

使用樣式映射或類別映射 使樣式動態(tài)化的另一種方法是向模板中的類或樣式屬性添加表達(dá)式,可以使用classMap和styleMap根據(jù)條件(如this.attribute值)輕松應(yīng)用類或樣式。

閱讀更多關(guān)于它們的內(nèi)容:https://lit . dev/docs/components/styles/# dynamic-classes-and-styles

這可能需要更改從css-module.js導(dǎo)入的內(nèi)容。