我在CSS中长时间使用3位十六进制颜色值:#fff
,#999
,#069
等。我可以看到重复的字母/数字合并以创建一个3位十六进制颜色代码,但我不完全理解能够在PHP中编写转换器的模式。有没有这方面的文件?
编辑:哦,也许我的问题不明确。我需要知道一些6位十六进制颜色值如何转换为3位数。 xxxxxx
(ffffff
)和xxyyzz
(006699
) - 这是唯一的两种模式,对吗?
答案 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)+'. '));
像这样。