Skip to content

Bits of .NET

Daily micro-tips for C#, SQL, performance, and scalable backend engineering.

  • Asp.Net Core
  • C#
  • SQL
  • JavaScript
  • CSS
  • About
  • ErcanOPAK.com
  • No Access
  • Privacy Policy
CSS

CSS: Use CSS Variables for Theming and Dynamic Styling

- 27.05.26 - ErcanOPAK

🎨 One Variable Change, Whole Site Updates

Sass variables compile once. CSS variables update at runtime. Dark mode, dynamic theming, component libraries — finally possible.

📦 Defining and Using Variables

/* Define on :root (global) */
:root {
  --primary-color: #3498db;
  --secondary-color: #2ecc71;
  --spacing-unit: 8px;
  --border-radius: 4px;
  --font-size-base: 16px;
}

/* Use variables */
.button {
  background-color: var(--primary-color);
  padding: var(--spacing-unit) calc(var(--spacing-unit) * 2);
  border-radius: var(--border-radius);
  font-size: var(--font-size-base);
}

.button-secondary {
  background-color: var(--secondary-color);
}

🎯 Dynamic Dark Mode

:root {
  --bg-color: #ffffff;
  --text-color: #333333;
  --card-bg: #f5f5f5;
}

[data-theme='dark'] {
  --bg-color: #1a1a2e;
  --text-color: #e0e0e0;
  --card-bg: #16213e;
}

body {
  background-color: var(--bg-color);
  color: var(--text-color);
  transition: background-color 0.3s, color 0.3s;
}

.card {
  background-color: var(--card-bg);
}

✅ JavaScript Integration

// Get variable value
const primaryColor = getComputedStyle(document.documentElement)
    .getPropertyValue('--primary-color');

// Set variable value
document.documentElement.style.setProperty('--primary-color', '#e74c3c');

// Dark mode toggle
function toggleDarkMode() {
  const isDark = document.body.dataset.theme === 'dark';
  document.body.dataset.theme = isDark ? 'light' : 'dark';
}

// Responsive variables
const setResponsiveVars = () => {
  const width = window.innerWidth;
  if (width < 768) {
    document.documentElement.style.setProperty('--spacing-unit', '4px');
  } else {
    document.documentElement.style.setProperty('--spacing-unit', '8px');
  }
};
window.addEventListener('resize', setResponsiveVars);

💡 Browser Support

  • Chrome 49+ ✅
  • Firefox 31+ ✅
  • Safari 9.1+ ✅
  • Edge 15+ ✅
  • IE: ❌ (use fallback: color: #333; color: var(--text-color);)

"Switched from Sass variables to CSS variables. Dark mode toggle now works instantly without page reload. Component library has 10x fewer duplicates. CSS variables are underrated."

— Frontend Developer

Related posts:

CSS Layout Breaks on Mobile Only

CSS Subgrid — The Most Misunderstood Layout Feature

CSS: Use clamp() for Responsive Typography Without Media Queries

Post Views: 5

Post navigation

Windows 11: Enable Clipboard History to Copy Multiple Items
HTML: Use Details and Summary for Accordion Content Without JavaScript

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

June 2026
M T W T F S S
1234567
891011121314
15161718192021
22232425262728
2930  
« May    

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (882)
  • Get the First and Last Word from a String or Sentence in SQL (838)
  • How to select distinct rows in a datatable in C# (808)
  • How to make theater mode the default for Youtube (805)
  • Add Constraint to SQL Table to ensure email contains @ (580)
  • How to enable, disable and check if Service Broker is enabled on a database in SQL Server (579)
  • Average of all values in a column that are not zero in SQL (538)
  • How to use Map Mode for Vertical Scroll Mode in Visual Studio (505)
  • Find numbers with more than two decimal places in SQL (454)

Recent Posts

  • C#: Use String Interpolation Instead of Concatenation
  • C#: Use Tuples to Return Multiple Values from Methods
  • SQL: Use ISNULL and NULLIF for Smart NULL Handling
  • .NET Core: Use Data Annotations for Model Validation
  • Git: Use Git Clean to Remove Untracked Files
  • Ajax: Add Custom Headers to Fetch Requests
  • JavaScript: Use console.table to Display Arrays as Tables
  • HTML: Use Spellcheck Attribute to Enable Browser Spell Check
  • CSS: Use user-select to Prevent Text Selection
  • Windows 11: Use Snipping Tool for Instant Screenshots

Most Viewed Posts

  • Get the User Name and Domain Name from an Email Address in SQL (953)
  • How to add default value for Entity Framework migrations for DateTime and Bool (882)
  • Get the First and Last Word from a String or Sentence in SQL (838)
  • How to select distinct rows in a datatable in C# (808)
  • How to make theater mode the default for Youtube (805)

Recent Posts

  • C#: Use String Interpolation Instead of Concatenation
  • C#: Use Tuples to Return Multiple Values from Methods
  • SQL: Use ISNULL and NULLIF for Smart NULL Handling
  • .NET Core: Use Data Annotations for Model Validation
  • Git: Use Git Clean to Remove Untracked Files

Social

  • ErcanOPAK.com
  • GoodReads
  • LetterBoxD
  • Linkedin
  • The Blog
  • Twitter
© 2026 Bits of .NET | Built with Xblog Plus free WordPress theme by wpthemespace.com