颜色选择器工具

专业的在线颜色选择器,支持HEX、RGB、HSL、CMYK格式转换,提供渐变生成和配色方案

颜色选择

选择颜色并查看多种格式

59
130
246
100%

渐变生成器

创建CSS渐变效果

background: linear-gradient(to right, #3B82F6, #8B5CF6);

配色方案

基于选定颜色生成协调的配色方案

对比度检测

检查前景色和背景色的对比度是否符合WCAG标准

示例文本
对比度比值: 21:1
正常文字 (AA): 通过 ✓
大文字 (AA): 通过 ✓
正常文字 (AAA): 通过 ✓
大文字 (AAA): 通过 ✓

代码示例

以下是在不同编程语言中处理颜色格式的代码示例:

JavaScript 颜色转换

// HEX 转 RGB
function hexToRgb(hex) {
    // 移除 #
    hex = hex.replace(/^#/, '');
    
    // 解析
    const bigint = parseInt(hex, 16);
    const r = (bigint >> 16) & 255;
    const g = (bigint >> 8) & 255;
    const b = bigint & 255;
    
    return { r, g, b };
}

// RGB 转 HEX
function rgbToHex(r, g, b) {
    return "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
}

// RGB 转 HSL
function rgbToHsl(r, g, b) {
    r /= 255;
    g /= 255;
    b /= 255;
    
    const max = Math.max(r, g, b);
    const min = Math.min(r, g, b);
    let h, s, l = (max + min) / 2;
    
    if (max === min) {
        h = s = 0;
    } else {
        const d = max - min;
        s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
        
        switch (max) {
            case r: h = ((g - b) / d + (g < b ? 6 : 0)) / 6; break;
            case g: h = ((b - r) / d + 2) / 6; break;
            case b: h = ((r - g) / d + 4) / 6; break;
        }
    }
    
    return {
        h: Math.round(h * 360),
        s: Math.round(s * 100),
        l: Math.round(l * 100)
    };
}

// HSL 转 RGB
function hslToRgb(h, s, l) {
    h /= 360;
    s /= 100;
    l /= 100;
    
    let r, g, b;
    
    if (s === 0) {
        r = g = b = l;
    } else {
        const hue2rgb = (p, q, t) => {
            if (t < 0) t += 1;
            if (t > 1) t -= 1;
            if (t < 1/6) return p + (q - p) * 6 * t;
            if (t < 1/2) return q;
            if (t < 2/3) return p + (q - p) * (2/3 - t) * 6;
            return p;
        };
        
        const q = l < 0.5 ? l * (1 + s) : l + s - l * s;
        const p = 2 * l - q;
        
        r = hue2rgb(p, q, h + 1/3);
        g = hue2rgb(p, q, h);
        b = hue2rgb(p, q, h - 1/3);
    }
    
    return {
        r: Math.round(r * 255),
        g: Math.round(g * 255),
        b: Math.round(b * 255)
    };
}

// 计算对比度 (WCAG)
function getContrastRatio(color1, color2) {
    const getLuminance = (r, g, b) => {
        [r, g, b] = [r, g, b].map(v => {
            v /= 255;
            return v <= 0.03928 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);
        });
        return 0.2126 * r + 0.7152 * g + 0.0722 * b;
    };
    
    const lum1 = getLuminance(color1.r, color1.g, color1.b);
    const lum2 = getLuminance(color2.r, color2.g, color2.b);
    
    const lighter = Math.max(lum1, lum2);
    const darker = Math.min(lum1, lum2);
    
    return (lighter + 0.05) / (darker + 0.05);
}

Python 颜色转换

# HEX 转 RGB
def hex_to_rgb(hex_color):
    hex_color = hex_color.lstrip('#')
    return tuple(int(hex_color[i:i+2], 16) for i in (0, 2, 4))

# RGB 转 HEX
def rgb_to_hex(r, g, b):
    return '#{:02x}{:02x}{:02x}'.format(r, g, b)

# RGB 转 HSL
def rgb_to_hsl(r, g, b):
    r, g, b = r/255.0, g/255.0, b/255.0
    max_val = max(r, g, b)
    min_val = min(r, g, b)
    l = (max_val + min_val) / 2
    
    if max_val == min_val:
        h = s = 0
    else:
        d = max_val - min_val
        s = d / (2 - max_val - min_val) if l > 0.5 else d / (max_val + min_val)
        
        if max_val == r:
            h = ((g - b) / d + (6 if g < b else 0)) / 6
        elif max_val == g:
            h = ((b - r) / d + 2) / 6
        else:
            h = ((r - g) / d + 4) / 6
    
    return (int(h * 360), int(s * 100), int(l * 100))

# HSL 转 RGB
def hsl_to_rgb(h, s, l):
    h, s, l = h/360.0, s/100.0, l/100.0
    
    if s == 0:
        r = g = b = l
    else:
        def hue_to_rgb(p, q, t):
            if t < 0: t += 1
            if t > 1: t -= 1
            if t < 1/6: return p + (q - p) * 6 * t
            if t < 1/2: return q
            if t < 2/3: return p + (q - p) * (2/3 - t) * 6
            return p
        
        q = l * (1 + s) if l < 0.5 else l + s - l * s
        p = 2 * l - q
        
        r = hue_to_rgb(p, q, h + 1/3)
        g = hue_to_rgb(p, q, h)
        b = hue_to_rgb(p, q, h - 1/3)
    
    return (int(r * 255), int(g * 255), int(b * 255))

CSS 颜色使用

/* 不同颜色格式的CSS使用 */

/* HEX格式 */
.element {
    color: #3B82F6;
    background-color: #ffffff;
}

/* RGB格式 */
.element {
    color: rgb(59, 130, 246);
    background-color: rgb(255, 255, 255);
}

/* RGBA格式 (带透明度) */
.element {
    color: rgba(59, 130, 246, 0.8);
    background-color: rgba(255, 255, 255, 0.9);
}

/* HSL格式 */
.element {
    color: hsl(217, 91%, 60%);
    background-color: hsl(0, 0%, 100%);
}

/* HSLA格式 (带透明度) */
.element {
    color: hsla(217, 91%, 60%, 0.8);
}

/* 线性渐变 */
.gradient {
    background: linear-gradient(to right, #3B82F6, #8B5CF6);
}

/* 径向渐变 */
.radial-gradient {
    background: radial-gradient(circle, #3B82F6, #8B5CF6);
}

/* CSS变量 (推荐用于主题色) */
:root {
    --primary-color: #3B82F6;
    --secondary-color: #8B5CF6;
    --text-color: #1F2937;
    --bg-color: #ffffff;
}

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

关于颜色格式

HEX 颜色

HEX(十六进制)是Web开发中最常用的颜色格式。它由6个十六进制字符组成,前两个字符表示红色,中间两个表示绿色,后两个表示蓝色。每个字符的范围是0-F(0-15)。

例如:#3B82F6表示红色59(0x3B)、绿色130(0x82)、蓝色246(0xF6)。

RGB 颜色

RGB(红绿蓝)使用三个数值来表示颜色,每个数值范围在0-255之间。RGB更直观,容易理解每种颜色分量的强度。

例如:rgb(59, 130, 246)表示红色59、绿色130、蓝色246。

HSL 颜色

HSL(色相、饱和度、亮度)更符合人类对颜色的感知方式:

  • 色相(H):0-360度,表示颜色的类型(红色、蓝色等)
  • 饱和度(S):0-100%,表示颜色的纯度
  • 亮度(L):0-100%,表示颜色的明暗

例如:hsl(217, 91%, 60%)表示蓝色系、高饱和度、中等亮度。

CMYK 颜色

CMYK(青、品红、黄、黑)是印刷行业常用的颜色模式。与RGB的加色模式不同,CMYK是减色模式,通过吸收光来显示颜色。

对比度和可访问性

根据WCAG(Web内容可访问性指南)标准,文本和背景之间的对比度应满足:

  • AA级别:正常文本至少4.5:1,大文本至少3:1
  • AAA级别:正常文本至少7:1,大文本至少4.5:1