Less中的颜色计算溢出

来源:互联网 发布:艾可萨兽数据 编辑:程序博客网 时间:2024/05/15 15:15

less中的颜色计算溢出

问题来源:

@the-border: 1px;@base-color:#842210;#test3 {  color: @base-color * 2;  border-left: @the-border;  border-right: @the-border * 5;}

less和css中颜色都是用6位的16进制数来表示的,所以按照16进制去计算颜色似乎是理所应当的。按照16进制来运算color的值应该是#1084420,最高位溢出舍去,那么结果应该是#084420
然而。。实际情况呢?

#test3 {  color: #ff4420;  border-left: 1px;  border-right: 5px;}

最后4位与我们预期相同,但是前两位却莫名其妙的变成了ff,第一位变成f还可以理解,毕竟8*2=16溢出了,但是第二位明明是4*2=8,为什么会莫名其妙变成f,这是个很有意思的问题,值得研究一下。

less和css中的颜色表示

  • 6位16进制 如#084420
  • 3位16进制 如#111
  • rgb颜色 如rgb(255,255,255)
  • rgba颜色 如rgba(255,255,255,0.5)

首先需要搞清楚的是以上四种颜色的转换


用四种方式表示同一种颜色 蓝色

//6位16进制.test{    color:#0000ff;}
//3位16进制.test{    color:#00f;}
//rgb表示.test{    color:rgb(0,0,255);}
//rgba表示.test{    color:rgba(0,0,255,1);}

从上面的例子可以看出,用6位16进制数来表示颜色的时候,其实这个并不是一个传统意义上的数,六位数组其实是以两位一组分为三组,从前到后依次表示r g b 的值,用#842210的例子来说:

#842210 中,84代表红色的值为8*16+4 =132,22代表绿色的值 2*16+4 =34,蓝色的值为 1*16 =16

那么测试一下,rgb(132,34,16)与#842210是不是一样的呢?

//less@base-color:rgb(132,34,16);#test3 {  color: @base-color ;}

用在线less转换工具将其转换为css的结果

#test3 {  color: #842210;}

那么最开始提出的那个问题就很好理解了

因为6位16进制的颜色代码是分组的,两位一组分别代表R G B的值,那么 G 的值通过乘法运算大于255之后进位到 R的值中就是不合理的。所以当计算的结果大于255之后当前颜色的区域值取FF

再来用加法验证下

//less@base-color:#880088;@test : #910088;#test3 {  color: @base-color + @test;}

用在线LESS编译器

#test3 {  color: #ff00ff;}

符合预期,那么3为16进制代表的颜色呢?
与6位的16进制原理相同,只不过用是用1个位来分别代表R G B的值罢了,这三位的计算也是分开的。

LESS在线编译器 http://tool.oschina.net/less

0 0