1. The Mathematics Behind HEX to RGB Conversion
// Mathematical manual conversion:
const hex = "3B82F6";
const r = parseInt(hex.slice(0, 2), 16); // 59
const g = parseInt(hex.slice(2, 4), 16); // 130
const b = parseInt(hex.slice(4, 6), 16); // 246
console.log(`rgb(${r}, ${g}, ${b})`); // rgb(59, 130, 246)Basic parseInt radix-16 decomposition in JavaScript.
2. Pure JavaScript Utility: Supporting 3-Digit, 6-Digit & 8-Digit HEX
function hexToRgba(hex, overrideAlpha) {
let clean = hex.replace(/^#/, "").trim();
if (clean.length === 3) {
clean = clean.split("").map(c => c + c).join("");
}
if (clean.length === 6) {
const num = parseInt(clean, 16);
const r = (num >> 16) & 255;
const g = (num >> 8) & 255;
const b = num & 255;
const a = overrideAlpha !== undefined ? overrideAlpha : 1;
return `rgba(${r}, ${g}, ${b}, ${a})`;
}
if (clean.length === 8) {
const num = parseInt(clean, 16);
const r = (num >> 24) & 255;
const g = (num >> 16) & 255;
const b = (num >> 8) & 255;
const a = overrideAlpha !== undefined ? overrideAlpha : +(num & 255) / 255;
return `rgba(${r}, ${g}, ${b}, ${Number(a.toFixed(2))})`;
}
throw new Error("Invalid HEX format");
}High-performance bitwise hexToRgba supporting 3, 6, and 8-digit hexadecimal colors.
3. Understanding 8-Digit HEX Color Codes (#RRGGBBAA)
4. Modern CSS Color Syntax & color-mix() Without JS
:root {
--primary-hex: #3b82f6;
}
.card {
/* Modern space & slash syntax */
background: rgb(59 130 246 / 0.5);
/* Native CSS opacity blending with zero JS conversion */
border-color: color-mix(in srgb, var(--primary-hex) 50%, transparent);
}Native CSS color-mix() enables dynamic opacity on HEX variables directly in stylesheets.