Skip to main content
Svelte provides two ways to set classes on elements: the class attribute and the class: directive.

Class Attribute

Primitive values are treated like any other attribute:
For historical reasons, falsy values (like false and NaN) are stringified (class="false"), though class={undefined} (or null) causes the attribute to be omitted altogether. In a future version of Svelte, all falsy values will cause class to be omitted.

Objects and Arrays

Since Svelte 5.16, class can be an object or array, converted to a string using clsx.

Object Form

If the value is an object, the truthy keys are added:

Array Form

If the value is an array, the truthy values are combined:
Whether using the array or object form, you can set multiple classes simultaneously with a single condition, which is particularly useful with utility-first CSS frameworks like Tailwind.

Composing Classes

Arrays can contain arrays and objects, and clsx will flatten them. This is useful for combining local classes with props:
The user of this component has the same flexibility to use a mixture of objects, arrays and strings:

ClassValue Type

Since Svelte 5.19, Svelte exposes the ClassValue type for type-safe class names in component props:

The class: Directive

Prior to Svelte 5.16, the class: directive was the most convenient way to set classes conditionally.

Shorthand

As with other directives, you can use a shorthand when the name of the class coincides with the value:
Unless you’re using an older version of Svelte, consider avoiding class:, since the attribute is more powerful and composable.

Practical Examples

Toggle Button States

Combining Multiple Conditions

With Tailwind CSS