在线取色器:从屏幕任意位置获取颜色
了解颜色格式(HEX、RGB、HSL),使用浏览器 API 取色,以及颜色搭配和无障碍对比度的最佳实践。
什么是取色器?
取色器(Color Picker)是一种工具,让你从屏幕上的任意位置获取颜色值。无论是网页设计、UI 开发还是数字艺术,精确获取颜色是日常工作的一部分。一个好的取色器能将视觉颜色转换为 HEX、RGB、HSL 等多种格式的代码值。
浏览器原生的取色能力越来越强大,配合我们的 在线取色器,你可以直接在网页中拾取、转换和管理颜色。
颜色格式详解
HEX(十六进制)
HEX 是网页设计中最常用的颜色格式。用 6 个十六进制字符表示红、绿、蓝三个通道:
/* HEX 颜色示例 */
color: #FF5733; /* 橙红色 */
color: #3498DB; /* 蓝色 */
color: #2ECC71; /* 绿色 */
color: #000000; /* 黑色 */
color: #FFFFFF; /* 白色 */
/* 带透明度的 HEX (8 位) */
color: #FF573380; /* 50% 透明度的橙红色 */
RGB / RGBA
RGB 使用 0-255 的数值表示红、绿、蓝三个通道。RGBA 添加了透明度通道(0-1)。
/* RGB 颜色 */
color: rgb(255, 87, 51); /* 橙红色 */
color: rgb(52, 152, 219); /* 蓝色 */
/* RGBA 带透明度 */
color: rgba(255, 87, 51, 0.5); /* 50% 透明度 */
HSL / HSLA
HSL 使用色相(Hue)、饱和度(Saturation)和亮度(Lightness)描述颜色,更符合人类对颜色的感知方式。调整亮度或饱和度时比 HEX/RGB 更直观。
/* HSL 颜色 */
color: hsl(14, 100%, 60%); /* 橙红色 */
color: hsl(204, 70%, 53%); /* 蓝色 */
/* HSLA 带透明度 */
color: hsla(14, 100%, 60%, 0.8); /* 80% 透明度 */
浏览器端取色 API
现代浏览器提供了 EyeDropper API,允许用户从屏幕上任意位置拾取颜色:
// 使用 EyeDropper API 取色
async function pickColor() {
if (!window.EyeDropper) {
alert('你的浏览器不支持 EyeDropper API');
return;
}
const eyeDropper = new EyeDropper();
try {
const result = await eyeDropper.open();
console.log('选中的颜色:', result.sRGBHex);
// 输出如: #ff5733
return result.sRGBHex;
} catch (e) {
console.log('用户取消了取色');
}
}
// 绑定到按钮
document.getElementById('pick-btn').addEventListener('click', pickColor);
注意:EyeDropper API 需要用户手势触发(如点击),且需要 HTTPS 环境。
颜色转换
在不同格式之间转换颜色是常见需求:
// HEX 转 RGB
function hexToRgb(hex) {
const result = /^#?([a-fd]{2})([a-fd]{2})([a-fd]{2})$/i.exec(hex);
return result ? {
r: parseInt(result[1], 16),
g: parseInt(result[2], 16),
b: parseInt(result[3], 16)
} : null;
}
console.log(hexToRgb('#FF5733'));
// 输出: { r: 255, g: 87, b: 51 }
// RGB 转 HSL
function rgbToHsl(r, g, b) {
r /= 255; g /= 255; b /= 255;
const max = Math.max(r, g, b), 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) };
}
设计中的颜色搭配
好的颜色搭配提升设计质量。几种经典方案:
- 互补色:色轮上 180° 对立的颜色——高对比度,适合强调
- 类似色:色轮上相邻的颜色——和谐、自然
- 三色组:色轮上等距的三种颜色——丰富、平衡
- 单色:同一色相的不同明度/饱和度——统一、专业
无障碍与颜色对比度
WCAG 标准要求文字与背景有足够的对比度:
- AA 级:普通文字对比度 ≥ 4.5:1,大文字 ≥ 3:1
- AAA 级:普通文字对比度 ≥ 7:1,大文字 ≥ 4.5:1
// 计算相对亮度
function relativeLuminance(r, g, b) {
const [rs, gs, bs] = [r, g, b].map(c => {
c = c / 255;
return c <= 0.03928 ? c / 12.92 : Math.pow((c + 0.055) / 1.055, 2.4);
});
return 0.2126 * rs + 0.7152 * gs + 0.0722 * bs;
}
// 计算对比度
function contrastRatio(l1, l2) {
const lighter = Math.max(l1, l2);
const darker = Math.min(l1, l2);
return (lighter + 0.05) / (darker + 0.05);
}
CSS 自定义属性与颜色管理
使用 CSS 自定义属性管理颜色主题,方便全局切换:
:root {
--primary: #3498DB;
--primary-light: #5DADE2;
--primary-dark: #2874A6;
--text: #2C3E50;
--background: #ECF0F1;
}
.dark-theme {
--primary: #5DADE2;
--text: #ECF0F1;
--background: #2C3E50;
}
.button {
background-color: var(--primary);
color: var(--text);
}
常见问题
HEX 和 RGB 有什么区别?
只是表示方式不同。HEX 用十六进制,RGB 用十进制。视觉效果完全一样。HEX 更紧凑,RGB 更直观易读。
什么时候用 HSL?
当你需要微调颜色时。HSL 的色相、饱和度、亮度参数比 HEX/RGB 更直观——想要更亮就增加 L,想要更灰就降低 S。
浏览器取色器可以取屏幕外的颜色吗?
EyeDropper API 可以取屏幕上任意可见位置的颜色,包括其他应用窗口。但仅限屏幕可见区域。
取色器会上传我的屏幕数据吗?
不会。我们的 在线取色器 使用浏览器原生 API,所有操作在本地完成。
总结
无论是设计新界面还是维护现有项目,精确的颜色管理都是基础技能。掌握 HEX、RGB、HSL 格式之间的转换,了解对比度要求,善用浏览器原生 API。使用我们的 在线取色器 轻松拾取、转换和管理颜色。
试试这个工具?
打开工具 →