css color 之间的转换与一些最佳实践

2 篇文章 0 订阅
1 篇文章 0 订阅

近期BA要求把rgba转换成16进制的颜色,所以研究了一下怎么转换,以下是转换的方法

(1)rgba -> rgb

target = opacity * overlay + (1 - opacity) * background;
// rgba(0,0,0,0.2) -> rgb(204, 204, 204)  => 0 * 0.2 + (1 - 0.2) * 255

(2) rgb -> hex

function colorHex(value = {red: 255, green: 255, blue: 255, alpha: null}) {
    if(!value) return '#FFFFFF';
    if(typeof value !== 'object' && value.includes('#')) return value;
    var sColor = [value.red.toString(),value.green.toString(),value.blue.toString()];
    value = '';
    sColor.map(v => {
        v = parseInt(v.replace(/[^\d]/gi, ''), 10).toString(16);
        value += v.length == 1 ? '0'+v : v;
    }).join('');
    return '#'+ value;
}

(3) hex -> rgb

function colorRgb(color) {
    var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
    var sColor = color.toLowerCase();  
    if(sColor && reg.test(sColor)){  
        if(sColor.length === 4){  
            var sColorNew = "#";  
            for(var i=1; i<4; i+=1){  
                sColorNew += sColor.slice(i,i+1).concat(sColor.slice(i,i+1));     
            }  
            sColor = sColorNew;  
        }
        var sColorChange = [];  
        for(var i=1; i<7; i+=2){  
            sColorChange.push(parseInt("0x"+sColor.slice(i,i+2)));    
        }
        return {red: sColorChange[0], green: sColorChange[1], blue: sColorChange[2], alpha: null}; 
    } else{  
        return sColor;
    }  
}

但是为什么要这样做呢,转换的意义在哪?搜索了许多文章都没有发现任何有价值的内容,无论转换与否都不会对性能有所影响,也没有兼容性的差异,为什么还要转换呢,在css coding standards 中发现有一句是这样的写的

Use hex color codes #000 unless using rgba().

哦,这样我就有理由做转换了。

接下来,在修改代码的时候,发现有的地方颜色是小写字母,而有的地方用的大写字母,有没有统一标准呢,于是我又调研了一下,得出以下结论,建议用大写,原因如下

(1)hex使用16进制表示,而16进制原始是大写字母编写的
(2)通用颜色软件一般颜色都是用大写字母表示,方便使用
(3)CSS 标准使用大写字母(link: https://docs.ckan.org/en/ckan-2.7.3/contributing/css.html)

终于把想到的疑问有了合理的解释,同时欢迎大家纠正补充,以下是参考链接

https://www.drupal.org/project/drupal/issues/1360790
https://docs.ckan.org/en/ckan-2.7.3/contributing/css.html
https://www.quackit.com/css/css_color_codes.cfm
https://stackoverflow.com/questions/32695983/is-there-a-reason-to-use-uppercase-letters-for-hexadecimal-css-color-values

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值