Styling Attributes
Dynamically control CSS classes and inline styles based on data
Styling attributes allow you to dynamically apply CSS classes and inline styles based on your data values. This enables data-driven visual changes without JavaScript.
dbind_class
Purpose: Dynamically add one or more CSS classes to an element based on data values.
Syntax:
<!-- Simple: class name from data -->
<element dbind_class="fieldName"></element>
<!-- Multiple classes from single field -->
<element dbind_class="classesField"></element>Basic Usage
<!-- Add class based on status -->
<span dbind_class="statusClass" dbind_data="status"></span>
<!-- Badge with dynamic styling -->
<span class="badge" dbind_class="badgeType">Status</span>Data:
{
"status": "Active",
"statusClass": "status-active",
"badgeType": "badge-success"
}Result:
<span class="status-active">Active</span>
<span class="badge badge-success">Status</span>Multiple Classes
The field can contain multiple space-separated class names:
<div dbind_class="cardClasses">Content</div>Data:
{
"cardClasses": "card card-elevated card-hover animate-fade"
}Result:
<div class="card card-elevated card-hover animate-fade">Content</div>Combining Static and Dynamic Classes
DBindly adds dynamic classes to existing static classes:
<div class="product-card featured" dbind_class="categoryClass">
...
</div>Data:
{
"categoryClass": "category-electronics"
}Result:
<div class="product-card featured category-electronics">...</div>Use Cases
1. Status Indicators
<span class="status-badge" dbind_class="statusClass" dbind_data="status"></span>Data with different statuses:
// Active
{ "status": "Active", "statusClass": "status-active" }
// Pending
{ "status": "Pending", "statusClass": "status-pending" }
// Inactive
{ "status": "Inactive", "statusClass": "status-inactive" }CSS:
.status-badge { padding: 4px 12px; border-radius: 20px; }
.status-active { background: #22c55e; color: white; }
.status-pending { background: #f59e0b; color: white; }
.status-inactive { background: #ef4444; color: white; }2. Priority Levels
<div class="task-card" dbind_class="priorityClass">
<h4 dbind_data="title"></h4>
<span class="priority-badge" dbind_data="priority"></span>
</div>Data:
{
"title": "Fix critical bug",
"priority": "High",
"priorityClass": "priority-high"
}3. Category Styling
<article class="post-card" dbind_class="categoryClass">
<span class="category" dbind_data="category"></span>
<h3 dbind_data="title"></h3>
</article>CSS:
.category-tech { border-left: 4px solid #3b82f6; }
.category-design { border-left: 4px solid #ec4899; }
.category-business { border-left: 4px solid #10b981; }4. User Roles
<div class="user-badge" dbind_class="roleClass">
<span dbind_data="role"></span>
</div>Data:
{ "role": "Admin", "roleClass": "role-admin" }
{ "role": "Editor", "roleClass": "role-editor" }
{ "role": "Viewer", "roleClass": "role-viewer" }5. Product Availability
<div class="product" dbind_class="availabilityClass">
<h3 dbind_data="name"></h3>
<span dbind_data="availabilityText"></span>
</div>Data:
// In Stock
{
"availabilityClass": "in-stock",
"availabilityText": "In Stock"
}
// Low Stock
{
"availabilityClass": "low-stock",
"availabilityText": "Only 3 left"
}
// Out of Stock
{
"availabilityClass": "out-of-stock",
"availabilityText": "Out of Stock"
}6. Conditional Appearance in Lists
<div dbind_repeat="products">
<div class="product-card" dbind_class="productClasses">
<span dbind_show="featured" class="featured-badge">Featured</span>
<span dbind_show="onSale" class="sale-badge">Sale</span>
<h3 dbind_data="name"></h3>
</div>
</div>Data:
{
"products": [
{ "name": "Product A", "productClasses": "featured sale", "featured": true, "onSale": true },
{ "name": "Product B", "productClasses": "", "featured": false, "onSale": false }
]
}Building Class Strings Server-Side
Prepare class strings in your data for complex conditions:
{
"cardClasses": "card card-lg shadow-md hover:shadow-lg transition-shadow"
}This approach works well when class logic is complex or depends on multiple conditions.
dbind_style
Purpose: Dynamically apply inline CSS styles to an element.
Syntax:
<element dbind_style="fieldName"></element>Basic Usage
<div dbind_style="customStyles">Styled Content</div>Data:
{
"customStyles": "background-color: #3b82f6; color: white; padding: 20px;"
}Result:
<div style="background-color: #3b82f6; color: white; padding: 20px;">Styled Content</div>Use Cases
1. Dynamic Background Colors
<div class="category-header" dbind_style="headerStyle">
<h2 dbind_data="categoryName"></h2>
</div>Data:
{
"categoryName": "Electronics",
"headerStyle": "background-color: #1e40af;"
}2. Custom Brand Colors
<div class="brand-card" dbind_style="brandColors">
<img dbind_src="logo" dbind_alt="name">
<span dbind_data="name"></span>
</div>Data:
{
"name": "TechCorp",
"logo": "/logos/techcorp.png",
"brandColors": "background-color: #0f172a; color: #22d3ee; border-color: #22d3ee;"
}3. Progress Bars
<div class="progress-bar">
<div class="progress-fill" dbind_style="progressStyle"></div>
</div>
<span dbind_data="progressText"></span>Data:
{
"progressStyle": "width: 75%;",
"progressText": "75% Complete"
}4. Dynamic Sizing
<div class="chart-bar" dbind_style="barStyle">
<span dbind_data="value"></span>
</div>Data:
{
"value": "150 sales",
"barStyle": "height: 150px; background-color: #22c55e;"
}5. Custom Positioning
<div class="tooltip" dbind_style="tooltipPosition" dbind_data="tooltipText">
</div>Data:
{
"tooltipText": "Click here for help",
"tooltipPosition": "top: 100px; left: 250px;"
}6. Avatar Backgrounds (for initials)
<div class="avatar" dbind_style="avatarStyle">
<span dbind_data="initials"></span>
</div>Data:
{
"initials": "JD",
"avatarStyle": "background-color: #8b5cf6;"
}Combining Static and Dynamic Styles
Dynamic styles are added to existing inline styles:
<div style="border-radius: 8px;" dbind_style="dynamicStyles">
Content
</div>Result (if dynamicStyles = "background: blue;"):
<div style="border-radius: 8px; background: blue;">Content</div>CSS Custom Properties (Variables)
You can use CSS custom properties:
<div dbind_style="themeVars">
<h2>Themed Section</h2>
</div>Data:
{
"themeVars": "--primary-color: #3b82f6; --text-color: #1f2937;"
}CSS:
div {
color: var(--text-color);
border-color: var(--primary-color);
}dbind_class vs dbind_style: When to Use Which
| Use Case | Recommendation | Why |
|---|---|---|
| Status indicators | dbind_class | Predefined styles, semantic |
| Brand/theme colors | dbind_style | User-customizable colors |
| Layout changes | dbind_class | Maintain CSS separation |
| Progress/percentages | dbind_style | Dynamic numeric values |
| Hover/focus states | dbind_class | CSS handles pseudo-classes |
| One-off custom colors | dbind_style | No CSS needed |
Best Practices
Prefer dbind_class for:
- Predefined state variations (active, inactive, etc.)
- Complex style combinations
- Styles with pseudo-classes (:hover, :focus)
- Responsive variations
Prefer dbind_style for:
- Dynamic numeric values (widths, heights, positions)
- User-customizable colors (brand colors, themes)
- Unique one-off styling
- CSS custom properties
Complete Example: Product Grid with Dynamic Styling
<div class="product-grid">
<div dbind_repeat="products">
<article
class="product-card"
dbind_class="productClasses"
dbind_style="productAccent"
>
<!-- Status Badge -->
<span
class="status-badge"
dbind_class="statusBadgeClass"
dbind_data="status"
></span>
<!-- Featured Ribbon -->
<div
class="ribbon"
dbind_show="featured"
dbind_style="ribbonStyle"
>
Featured
</div>
<!-- Product Image -->
<div class="product-image" dbind_style="imageBorder">
<img dbind_src="image" dbind_alt="name">
</div>
<!-- Product Info -->
<div class="product-info">
<span class="category" dbind_class="categoryClass" dbind_data="category"></span>
<h3 dbind_data="name"></h3>
<p dbind_data="description"></p>
<!-- Price with conditional styling -->
<div class="price-container">
<span
class="price"
dbind_class="priceClass"
dbind_data="price"
dbind_format="currency:USD"
></span>
<span
class="original-price"
dbind_show="onSale"
dbind_data="originalPrice"
dbind_format="currency:USD"
></span>
</div>
</div>
<!-- Stock Indicator -->
<div class="stock-bar" dbind_style="stockBarStyle"></div>
</article>
</div>
</div>Sample Data:
{
"products": [
{
"name": "Wireless Headphones",
"description": "Premium audio experience",
"category": "Electronics",
"price": 149.99,
"originalPrice": 199.99,
"onSale": true,
"featured": true,
"status": "In Stock",
"image": "/images/headphones.jpg",
"productClasses": "featured on-sale",
"productAccent": "border-left: 4px solid #22c55e;",
"statusBadgeClass": "badge-success",
"categoryClass": "category-electronics",
"priceClass": "price-sale",
"ribbonStyle": "background-color: #f59e0b;",
"imageBorder": "border-color: #22c55e;",
"stockBarStyle": "width: 80%; background-color: #22c55e;"
},
{
"name": "Desk Lamp",
"description": "Adjustable LED lighting",
"category": "Home Office",
"price": 79.99,
"onSale": false,
"featured": false,
"status": "Low Stock",
"image": "/images/lamp.jpg",
"productClasses": "low-stock",
"productAccent": "border-left: 4px solid #f59e0b;",
"statusBadgeClass": "badge-warning",
"categoryClass": "category-home",
"priceClass": "",
"ribbonStyle": "",
"imageBorder": "",
"stockBarStyle": "width: 20%; background-color: #f59e0b;"
}
]
}CSS:
.product-card {
background: white;
border-radius: 12px;
overflow: hidden;
transition: transform 0.2s, box-shadow 0.2s;
}
.product-card:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgba(0,0,0,0.15);
}
.product-card.featured {
border-width: 2px;
border-style: solid;
}
.product-card.on-sale {
background: linear-gradient(to bottom right, white, #fef3c7);
}
.badge-success { background: #22c55e; color: white; }
.badge-warning { background: #f59e0b; color: white; }
.badge-danger { background: #ef4444; color: white; }
.category-electronics { color: #3b82f6; }
.category-home { color: #8b5cf6; }
.price-sale { color: #ef4444; font-weight: bold; }
.original-price { text-decoration: line-through; color: #9ca3af; }
.stock-bar {
height: 4px;
border-radius: 2px;
margin-top: auto;
}Next Steps
- Visibility - Show/hide elements conditionally
- Lists - Repeat elements for arrays
- Core Binding - Text content binding