Less中的颜色计算溢出

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值