Svelte是否有助于动态CSS样式?

Chr*_*man 6 svelte

在Svelte中,应如何根据组件状态在元素上更改类?

例如,您可能希望在某些条件下将类应用于按钮,如以下示例所示。

<button class="{{class}}">
Run Code Online (Sandbox Code Playgroud)

现在,这可以通过创建一个计算属性来实现,该属性在某些条件下将返回类名或空字符串。

但是,我担心这是否会污染计算属性的名称空间。例如,如果有一个status,则可能希望同时设置一个动态文本(例如statusMessage)和一个类(例如)statusClass

有没有更好的方法可以做到这一点,或者计算属性是否可行?Svelte是否计划对CSS提供更明确的支持?

wik*_*239 11

今天你可以使用:

export let whitetext = false;
<div class:whitetext></div>
Run Code Online (Sandbox Code Playgroud)

进而

<MyComponent whitetext={true} />
Run Code Online (Sandbox Code Playgroud)

简单的基于真/假的类的语法。

  • 就像这样 `&lt;div class:whitetext class:isspoken class:offset&gt;&lt;/div&gt;` (3认同)

Ric*_*ris 7

您可以使用内联表达式,如下所示:

<button class='{{active ? "active": "inactive"}}'>
  {{active ? 'Selected' : 'Select this'}}
</button>
Run Code Online (Sandbox Code Playgroud)

通常,这比使用计算属性好,因为仅通过查看模板即可立即清除可能的值。

如果表达式变得笨拙,也可以使用辅助函数-在某些情况下,您可能更喜欢使用这些函数而不是计算值:

<button class='{{getClass(status)}}'>{{getText(status)}}</button>

<script>
  export default {
    helpers: {
      getClass(status) {
        // ...
      },
      getText(status) {
        // ...
      }
    }
  };
</script>
Run Code Online (Sandbox Code Playgroud)

  • 截至今天,内联表达式为 ```&lt;button class='{active ? "active": "inactive"}'&gt;``` (少一个括号,万岁!) (4认同)