转换为3位十六进制颜色代码

时间:2009-09-22 10:25:07

标签: php css colors hex

我在CSS中长时间使用3位十六进制颜色值:#fff#999#069等。我可以看到重复的字母/数字合并以创建一个3位十六进制颜色代码,但我不完全理解能够在PHP中编写转换器的模式。有没有这方面的文件?

编辑:哦,也许我的问题不明确。我需要知道一些6位十六进制颜色值如何转换为3位数。 xxxxxxffffff)和xxyyzz006699) - 这是唯一的两种模式,对吗?

4 个答案:

答案 0 :(得分:31)

要将3个字符的十六进制代码转换为6个字符的代码,您需要重复每个字符:

$hex = '#fff';
$hex6 = '#' . $hex[1] . $hex[1] . $hex[2] . $hex[2] . $hex[3] . $hex[3];

如果要将其转换为十进制,可以使用hexdec函数

答案 1 :(得分:2)

3位CSS代码是6位数的简称“:#06a;是#0066aa;
每两位数代表0到255之间的数字 只需将这些值转换为十六进制和后退即可。

答案 2 :(得分:2)

#f0f扩展为#ff00ff所以基本上你只需要为每个字符计算值和值乘以16,例如:

#f98:f = 15 =>红色= 15 + 15 * 16 = 255等。

答案 3 :(得分:1)

function hexfix(str) {
  var v, w;
  v = parseInt(str, 16);	// in rrggbb
  if (str.length == 3) {
    // nybble colors - fix to hex colors
	//  0x00000rgb              -> 0x000r0g0b
	//  0x000r0g0b | 0x00r0g0b0 -> 0x00rrggbb
	w = ((v & 0xF00) << 8) | ((v & 0x0F0) << 4) | (v & 0x00F);
	v = w | (w << 4);
  }
  return v.toString(16).toUpperCase();
 }

var hex1 = 'AABBCC',
    hex2 = 'ABC';

document.body.appendChild(document.createTextNode(hex1+" becomes "+hexfix(hex1)+'.  '));
document.body.appendChild(document.createTextNode(hex2+" becomes "+hexfix(hex2)+'.  '));

像这样。