Snippets: HEX/RGB Color Converter
:root { --primary: #6366f1; --primary-hover: #4f46e5; --bg: #f1f5f9; --card: #ffffff; --text: #1e293b; --text-muted: #64748b; --border: #e2e8f0; --radius: 12px; --shadow: 0 4px 24px rgba(0,0,0,0.08); } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: "Segoe UI", system-ui, -apple-system, sans-serif; background: var(--bg); color: var(--text); min-height: 100vh; display: flex; justify-content: center; align-items: flex-start; padding: 24px 16px; }
CSS Before Head
<meta name="viewport" content="width=device-width, initial-scale=1.0">
HTML Head
.container { background: var(--card); border-radius: var(--radius); box-shadow: var(--shadow); padding: 32px; width: 100%; max-width: 480px; } h1 { font-size: 1.5rem; font-weight: 700; text-align: center; margin-bottom: 24px; color: var(--primary); } .converter-section { margin-bottom: 24px; padding: 20px; background: #f8fafc; border: 1.5px solid var(--border); border-radius: 8px; } .converter-section h2 { font-size: 0.85rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.04em; color: var(--text-muted); margin-bottom: 12px; } .input-row { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; } .input-row label { font-weight: 600; font-size: 0.9rem; min-width: 24px; color: var(--text-muted); } input[type="text"], input[type="number"] { flex: 1; padding: 10px 14px; border: 1.5px solid var(--border); border-radius: 8px; font-size: 1rem; color: var(--text); background: var(--card); transition: border-color 0.2s; min-width: 0; } input[type="text"]:focus, input[type="number"]:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(99,102,241,0.15); } .rgb-inputs { display: flex; gap: 8px; } .rgb-inputs .input-row { flex: 1; margin-bottom: 0; } button { width: 100%; padding: 10px; background: var(--primary); color: #fff; border: none; border-radius: 8px; font-size: 0.9rem; font-weight: 600; cursor: pointer; transition: background 0.2s, transform 0.1s; margin-top: 12px; } button:hover { background: var(--primary-hover); } button:active { transform: scale(0.98); } .color-preview { margin-top: 20px; height: 80px; border-radius: 8px; border: 1.5px solid var(--border); display: flex; align-items: center; justify-content: center; transition: background-color 0.3s; position: relative; overflow: hidden; } .color-preview .preview-label { font-size: 0.75rem; font-weight: 600; text-transform: uppercase; letter-spacing: 0.05em; padding: 4px 10px; border-radius: 4px; background: rgba(0,0,0,0.5); color: #fff; } .color-values { margin-top: 12px; display: flex; gap: 8px; flex-wrap: wrap; justify-content: center; } .color-values .chip { padding: 4px 12px; background: #f1f5f9; border: 1px solid var(--border); border-radius: 20px; font-size: 0.8rem; font-family: "JetBrains Mono", monospace; color: var(--text-muted); cursor: pointer; transition: all 0.15s; } .color-values .chip:hover { border-color: var(--primary); color: var(--primary); }
CSS After Head
function rgbToHex(r, g, b) { r = Math.max(0, Math.min(255, Math.round(r))); g = Math.max(0, Math.min(255, Math.round(g))); b = Math.max(0, Math.min(255, Math.round(b))); return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1).toUpperCase(); } function hexToRgb(hex) { var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex); return result ? { r: parseInt(result[1], 16), g: parseInt(result[2], 16), b: parseInt(result[3], 16) } : null; } function updatePreview(hex, rgb) { var preview = document.getElementById("result"); preview.style.backgroundColor = hex; var luminance = (0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b) / 255; var label = document.getElementById("previewLabel"); label.style.background = luminance > 0.5 ? "rgba(0,0,0,0.6)" : "rgba(255,255,255,0.8)"; label.style.color = luminance > 0.5 ? "#fff" : "#000"; label.textContent = hex; document.getElementById("chipHex").textContent = hex; document.getElementById("chipRgb").textContent = "rgb(" + rgb.r + ", " + rgb.g + ", " + rgb.b + ")"; } function toRGB() { var input = document.getElementById("HexInput").value.trim(); var hexColor = "#" + (input.length ? input : "000000"); var rgbColor = hexToRgb(hexColor); if (!rgbColor) return; document.getElementById("RGBInputR").value = rgbColor.r; document.getElementById("RGBInputG").value = rgbColor.g; document.getElementById("RGBInputB").value = rgbColor.b; updatePreview(hexColor.toUpperCase(), rgbColor); } function toHEX() { var r = Number(document.getElementById("RGBInputR").value) || 0; var g = Number(document.getElementById("RGBInputG").value) || 0; var b = Number(document.getElementById("RGBInputB").value) || 0; var hex = rgbToHex(r, g, b); document.getElementById("HexInput").value = hex.replace("#", ""); updatePreview(hex, {r: r, g: g, b: b}); } function copyValue(el) { navigator.clipboard.writeText(el.textContent).then(function() { var orig = el.textContent; el.textContent = "Copied!"; setTimeout(function() { el.textContent = orig; }, 800); }); } document.addEventListener("DOMContentLoaded", function() { toRGB(); }); document.addEventListener("keydown", function(e) { if (e.key === "Enter") { toRGB(); toHEX(); } });
JS Before HTML Body
HTML Body Attrs
<div class="container"> <h1>HEX / RGB Color Converter</h1> <div class="converter-section"> <h2>HEX to RGB</h2> <div class="input-row"> <label for="HexInput">#</label> <input type="text" id="HexInput" placeholder="e.g. 6366F1" value="6366F1" maxlength="6"> </div> <button onclick="toRGB()">Convert to RGB</button> </div> <div class="converter-section"> <h2>RGB to HEX</h2> <div class="rgb-inputs"> <div class="input-row"> <label for="RGBInputR">R</label> <input type="number" id="RGBInputR" min="0" max="255" value="99"> </div> <div class="input-row"> <label for="RGBInputG">G</label> <input type="number" id="RGBInputG" min="0" max="255" value="102"> </div> <div class="input-row"> <label for="RGBInputB">B</label> <input type="number" id="RGBInputB" min="0" max="255" value="241"> </div> </div> <button onclick="toHEX()">Convert to HEX</button> </div> <div class="color-preview" id="result"> <span class="preview-label" id="previewLabel">#6366F1</span> </div> <div class="color-values"> <span class="chip" id="chipHex" onclick="copyValue(this)">#6366F1</span> <span class="chip" id="chipRgb" onclick="copyValue(this)">rgb(99, 102, 241)</span> </div> </div>
HTML Body
HTML Foot
JS After HTML Body
Full HTML Code