前面的话

  在CSS中,颜色的表示方式主要包括关键字、16进制、RGB模式、RGBA模式、HSL模式、HSLA模式。关于颜色模式的详细信息移步至此。本文就16进制、RGB模式及HSL模式的互相转换进行实现。

模式转换

【1】16进制 -> RGB

  16进制是设置颜色值的常用方式,将三个介于00-FF的十六进制数连接起来,若16进制的3组数各自成对,则可简写为3位。

  16进制与RGB模式的对应关系为:16进制的前两位对应RGB的red部分;16进制的中间两位对应RGB的green部分;16进制的后两位对应RGB的blue部分。而16进制使用的16进制的数字格式,而RGB使用的10进制的数字格式。所以还需要数字进制的变换

  1. function sixteenToRgb(str){
  2. var r,g,b,rgb;
  3. if(str.length == 7){
  4. r = parseInt(str.substr(1,2),16);
  5. g = parseInt(str.substr(3,2),16);
  6. b = parseInt(str.substr(5,2),16);
  7. }else if(str.length == 4){
  8. r = parseInt('' + str.substr(1,1) + str.substr(1,1),16);
  9. g = parseInt('' + str.substr(2,1) + str.substr(2,1),16);
  10. b = parseInt('' + str.substr(3,1) + str.substr(3,1),16);
  11. }else{
  12. return 'false'
  13. }
  14. rgb = 'rgb(' + r +',' + g +','+b +')';
  15. return rgb;
  16. }
  17. console.log(sixteenToRgb('#123456'));//rgb(18,52,86)
  18. console.log(sixteenToRgb('#123'));//rgb(17,34,51)
  19. console.log(sixteenToRgb('#1234'));//false

【2】RGB -> 16进制

  通过组合不同的红色、绿色、蓝色分量创造出的颜色成为RGB模式的颜色。显示器是由一个个像素构成,利用电子束来表现色彩。像素把光的三原色:红色(R)、绿色(G)、蓝色(B)组合起来。每像素包含8位元色彩的信息量,有0-255的256个单元,其中0是完全无光状态,255是最亮状态

  在RGB模式转换为16进制模式要注意的是,转换的成R、G、B三个分量的16进制值如果是一位数,则需要在前一位补0

  1. function rgbToSixteen(str){
  2. var r16,g16,b16,sixteen;
  3. if(/^rgb\((\d+)\,(\d+)\,(\d+)\)$/.test(str)){
  4. if( RegExp.$1 >= 0 && RegExp.$1 <=255 || RegExp.$2 >= 0 && RegExp.$2 <=255 || RegExp.$3 >= 0 && RegExp.$3 <=255){
  5. r16 = addZero(Number(RegExp.$1).toString(16));
  6. g16 = addZero(Number(RegExp.$2).toString(16));
  7. b16 = addZero(Number(RegExp.$3).toString(16));
  8.   sixteen = '#' + r16 + g16 + b16 ;
  9.   return sixteen;
  10. }else{
  11. return 'false';
  12. }
  13. }else{
  14. return 'false';
  15. }
  16. }
  17. function addZero(str){
  18. if(str.length == 1){
  19. return '0' + str;
  20. }else{
  21. return str;
  22. }
  23. }
  24. console.log(rgbToSixteen('rgb(10,44,3)'));//#0a2c03
  25. console.log(rgbToSixteen('rgb(-10,44,3)'));//false
  26. console.log(rgbToSixteen('rgb(123)'));//false

【3】HSL -> RGB

  HSL模式是通过对色调(H)、饱和度(S)、亮度(L)三个颜色通道的变化以及它们相互的叠加得到各式各样的颜色。HSL标准几乎可以包括人类视力所能感知的所有颜色

  h:色调(hue)可以为任意整数。0(或360或-360)表示红色,60表示黄色,120表示绿色,180表示青色,240表示蓝色,300表示洋红(当h值大于360时,实际的值等于该值模360后的值)

  s:饱和度(saturation),就是指颜色的深浅度和鲜艳程度。取0-100%范围的值,其中0表示灰度(没有该颜色),100%表示饱和度最高(颜色最鲜艳)

  l:亮度(lightness),取0-100%范围的值,其中0表示最暗(黑色),100%表示最亮(白色)

  1. //参考http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion
  2. function hslToRgb(str){
  3. var r, g, b;
  4. var h, s, l;
  5. if(/^hsl\((\d+)\,(\d+)%\,(\d+)%\)$/.test(str)){
  6. if( RegExp.$1 >= 0 && RegExp.$1 <=360 && RegExp.$2 >= 0 && RegExp.$2 <=100 && RegExp.$3 >= 0 && RegExp.$3 <=100){
  7. h = RegExp.$1/360;
  8. s = RegExp.$2/100;
  9. l = RegExp.$3/100;
  10. if(s == 0){
  11. r = g = b = l;
  12. }else{
  13. var hue2rgb = function hue2rgb(p, q, t){
  14. if(t < 0) t += 1;
  15. if(t > 1) t -= 1;
  16. if(t < 1/6) return p + (q - p) * 6 * t;
  17. if(t < 1/2) return q;
  18. if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
  19. return p;
  20. }
  21.  
  22. var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
  23. var p = 2 * l - q;
  24. r = hue2rgb(p, q, h + 1/3);
  25. g = hue2rgb(p, q, h);
  26. b = hue2rgb(p, q, h - 1/3);
  27. }
  28. return 'rgb(' + Math.round(r * 255) + ','+ Math.round(g * 255)+ ',' + Math.round(b * 255) + ')';
  29. }else{
  30. return 'false';
  31. }
  32. }else{
  33. return 'false';
  34. }
  35. }
  36. console.log(hslToRgb('hsl(248,64%,39%)'));//rgb(53,36,163)
  37. console.log(hslToRgb('hsl(-248,64%,39%)'));//false
  38. console.log(hslToRgb('hsl(300,40%,50%)'));//rgb(179,77,178)

【4】RGB -> HSL

  1. //参考http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion
  2. function rgbToHsl(str){
  3. var r,g,b;
  4. if(/^rgb\((\d+)\,(\d+)\,(\d+)\)$/.test(str)){
  5. if( RegExp.$1 >= 0 && RegExp.$1 <=255 && RegExp.$2 >= 0 && RegExp.$2 <=255 && RegExp.$3 >= 0 && RegExp.$3 <=255){
  6. r = RegExp.$1/255, g = RegExp.$2/255, b = RegExp.$3/255;
  7. var max = Math.max(r, g, b), min = Math.min(r, g, b);
  8. var h, s, l = (max + min) / 2;
  9.  
  10. if(max == min){
  11. h = s = 0; // achromatic
  12. }else{
  13. var d = max - min;
  14. s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
  15. switch(max){
  16. case r: h = (g - b) / d + (g < b ? 6 : 0); break;
  17. case g: h = (b - r) / d + 2; break;
  18. case b: h = (r - g) / d + 4; break;
  19. }
  20. h /= 6;
  21. }
  22. return 'hsl(' + Math.round(h*360) + ',' + Math.round(s*100) + '%,' + Math.round(l*100) + '%)';
  23. }else{
  24. return 'false';
  25. }
  26. }else{
  27. return 'false';
  28. }
  29. }
  30. console.log(rgbToHsl('rgb(53,36,163)'));//hsl(248,64%,39%)
  31. console.log(rgbToHsl('rgb(179,77,178)'));//hsl(301,40%,50%)
  32. console.log(rgbToHsl('rgb(300,1,1)'));//false

DEMO实现

简易拾色器

16进制颜色转换器

RGB颜色转换器

HSL颜色转换器

CSS颜色模式转换器的实现的更多相关文章

  1. css颜色模式hsla和rgba

    在CSS3中可以使用RGBA和HSLA两种色彩模式,这两个都可以用来设置颜色以及指定透明度. rgba指的是:红色.绿色.蓝色.Alpha透明度(Red-Green-Blue-Alpha)前三个值取值 ...

  2. 深入理解CSS六种颜色模式

    前面的话 赏心悦目的颜色搭配让人感到舒服,修改元素颜色的功能让人趋之若鹜.但颜色规划不当,会让网站用户无所适从.颜色从<font color="">发展至今,保留了很多 ...

  3. CSS学习(十六)-HSLA颜色模式

    一.理论: 1.HSLA颜色模式 a.HSLA在HSL基础上添加了不透明度,值越大透明度越低 b.HSLA颜色模式的浏览器兼容性和HSL一样,仅仅有较新版本号的主流浏览器才支持 2.RGBA和HSLA ...

  4. 【CSS进阶】CSS 颜色体系详解

    说到 CSS 颜色,相比大家都不会陌生,本文是我个人对 CSS 颜色体系的一个系统总结与学习,分享给大家. 先用一张图直观的感受一下与 CSS 颜色相关大概覆盖了哪些内容. 接下来的行文内容大概会按照 ...

  5. 学习笔记 css3--选择器&新增颜色模式&文本相关

    Css3 选择器 --属性选择器 E[attr]只使用属性名,但没有确定任何属性值,E[attr="value"]指定属性名,并指定了该属性的属性值E[attr~="va ...

  6. 从零开始学 Web 之 CSS3(二)颜色模式,文字阴影,盒模型,边框圆角,边框阴影

    大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...

  7. IT兄弟连 HTML5教程 CSS3属性特效 新增颜色模式

    对于设计人员和开发人员来说,CSS一直是web设计过程中重要的一部分.网页外观主要由CSS控制,编写CSS代码可以任意改变我们的网页布局以及网页内容的样式.随着CSS3的出现以及越来越多的浏览器对它的 ...

  8. 代码自动补全插件CodeMix全新发布CI 2019.7.15|改进CSS颜色辅助

    CodeMix是Eclipse的一款插件,它解锁了VS Code和Code OSS附加扩展的各种技术,支持各种语言. 作为Eclipse开发人员,您再也不必觉得自己已被排除在朋友使用Visual St ...

  9. CSS颜色代码

    颜色值 CSS 颜色使用组合了红绿蓝颜色值 (RGB) 的十六进制 (hex) 表示法进行定义.对光源进行设置的最低值可以是 0(十六进制 00).最高值是 255(十六进制 FF).从 0 到 25 ...

随机推荐

  1. torch-ios框架XCODE使用备忘

    1.首先编译框架   ./generate_ios_framework 2.把框架包含进project  在general-link Frameweork and Libraries 加入这个框架,注 ...

  2. 基于Moodle的IT课程辅助教育平台搭建

    基于Moodle的IT课程辅助教育平台搭建 Moodle是一个开源课程管理系统(CMS),也被称为学习管理系统(LMS)或虚拟学习环境(VLE).它已成为深受世界各地教育工作者喜爱的一种为学生建立网上 ...

  3. 正则表达式统计java代码空白行,有效代码

    import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import jav ...

  4. SpringMVC入门配置和简单实现

    web.xml的配置 <!-- springmvc中央控制器 --> <servlet> <servlet-name>springmvc</servlet-n ...

  5. NSString格式校验

    在项目开发过程中,NSString类型的变量是经常用到的,而且我们常常会对其格式进行对应的各种校验,你比如,在登录注册的时候,需要验证用户名的长度,用户名的字符组成等等,其实现在也有很多第三方提供的N ...

  6. shell脚本调试

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-shell-debug/ 一. 前言 shell编程在unix/linux世界中使用得非常广泛,熟 ...

  7. poj 1195 - Mobile phones(树状数组)

    二维的树状数组,,, 记得矩阵的求和运算要想好在写.... 代码如下: #include <cstdio> #include <cstdlib> #include <cm ...

  8. hdu 4698 - Counting(思路)

    转:题意:给定一个二维平面,其中x取值为1-N,y取值为1-M,现给定K个点,问至少包括K个点中的一个的满足要求的<Xmin, Xmax, Ymin, Ymax>共有多少中取值情况.也就是 ...

  9. ListView 加载更多列表 Load More mono forandroid 项目笔记

    今天项目经理找我说Listview加载更多的时候会出现一些问题,主要表现在会顿一下.让我我就去找Java的方法看看.自己写出了mono 的加载更多功能.和大家分享一下 先看效果 首先是模型类ListI ...

  10. kernel 内核安装

    1.kernel 下载 https://cdn.kernel.org/pub/linux/kernel/ 2.解压源码 tar -zxvf linux-*.tar.gz 3.进入目录 cd linux ...