Appearance
x:class Directive
The x:class directive adds or removes conditional CSS classes to HTML elements.
Basic Usage
Syntax
html
<element x:class:className="condition">- className: CSS class name
- condition: Expression that returns a boolean value
Condition Types
Boolean Values
html
<div x:class:active="isActive">Active</div>
<div x:class:inactive="!isActive">Passive</div>Comparison
html
<div x:class:current="status === 'current'">Current</div>
<div x:class:many="count > 10">Many</div>
<div x:class:empty="text.length === 0">Empty</div>Nested Properties
typescript
@Widget({
selector: '.nested-class',
template: `
<div x:class:valid="form.isValid">Form</div>
<div x:class:premium="user.isPremium">User</div>
`
})
export class NestedClassWidget {
@xproperty()
form = { isValid: false };
@xproperty()
user = { isPremium: true };
}Computed Properties
typescript
@Widget({
selector: '.computed-class',
template: `
<div x:class:editable="canEdit">Content</div>
<div x:class:urgent="isUrgent">Status</div>
`
})
export class ComputedClassWidget {
@xproperty()
user = { role: 'admin', permissions: ['edit'] };
@xproperty()
status: string = 'open';
@xproperty()
priority: string = 'high';
@xcomputed({ dependencies: ['user.role', 'user.permissions'] })
get canEdit(): boolean {
return this.user.role === 'admin' ||
this.user.permissions.includes('edit');
}
@xcomputed({ dependencies: ['status', 'priority'] })
get isUrgent(): boolean {
return this.status === 'open' && this.priority === 'high';
}
}Common Use Cases
Toggle States
html
<button x:class:active="isActive" x:on:click="toggle">Toggle</button>
<div x:class:visible="isVisible">Content</div>Form States
html
<input x:class:invalid="hasError" x:class:valid="isValid">
<button x:class:loading="isSubmitting">Submit</button>List States
html
<div x:class:selected="item.id === selectedId">Item</div>
<div x:class:empty="items.length === 0">List is empty</div>Responsive Design
html
<div x:class:mobile="isMobileView">Content</div>
<div x:class:desktop="isDesktopView">Content</div>Multiple Class Usage
html
<div
x:class:active="isActive"
x:class:loading="isLoading"
x:class:error="hasError">
Multiple classes
</div>Summary
- Conditional classes: Add/remove classes based on boolean expressions
- Nested support: Access like
user.isPremium - Computed support: Usage with computed values
- Performance: Only changed classes are updated
- Multiple usage: Multiple class bindings on the same element