CSS 中颜色的表示

当我在已经忘记了还有 HSL 这么个东西,最近却又用上了它的时候,我觉得还是有必要写一点关于颜色的总结(不涉及 IE)

CSS 中的颜色是以光的三原色 红-RED,绿-GREEN,蓝-BLUE 为基础表示出来的。其表示方法大致可以分为 颜色名称RGBHEXHSL 四类

颜色名称

/* color: colorName */
p { color: red; }

这个没太多说的,就是用颜色的 英文名称 直接表示,名称具体对应的 HEX值 可以 参照页面

RGB

/* 
    color: rgb(red, green, blue)
    color: rgba(red, green, blue, alpha)    
*/
p {
    color: rgb(255, 255, 255);
    background-color: rgba(0, 0, 0, .5)
}

RGB 的 3 个参数分别对应 redgreenblue。它是红绿蓝三色在数值上的直观体现,取值范围为 0~255,也可以是 0%~100%,但要注意的是,数值和百分比不能混合使用,rgb(255, 0, 0 ) 换成百分比,需要写作 rgb(100%, 0%, 0%),否则属于无效属性。

RGBARGB 的基础上增加了 alpha 属性,用来设置透明度,取值范围为 0~1,请不要尝试使用百分比 :)

HEX

/* color: hex */
p { color: #ffb500; }

HEX 就是十六进制,这是页面开发中使用频率最高的颜色表示方法。它的值是由红绿蓝三色数值的十六进制数组合而成。这样说可能有点绕口,让我们把上面例子中的值拆分成 4 个部分:#ffb500

  • 第 1 部分 # 相当于十六进制颜色的识别符,告诉浏览器后面跟上的是表示颜色的十六进制数
  • 第 2 部分 ffred 的十六进制数值,换算成十进制就是 15 * 16 + 15 = 255
  • 第 3 部分 b5green 的十六进制数值,换算成十进制就是 11 * 16 + 5 = 181
  • 第 4 部分 00blue 的十六进制数值,换算成十进制就是 0 * 16 + 0 = 0

因此,HEX 与 RGB 相互转换的过程可以分解为

#ffb500 ←→ rgb(ff, b5, 00) ←→ rgb(255, 181, 0)

而当 3 个十六进制数值的两位数都重复时(#ff0000),可以采用简写形式(#f00)。

HSL

/*
    color: hsl(hue, saturation, lightness)
    color: hsla(hue, saturation, lightness, alpha)
*/
p {
    color: hsl(0, 0%, 100%);
    background-color: hsla(0, 0%, 0%, .5)
}

HSL 对于我个人来说是不太好理解的(色彩基础弱鸡)。它有 3 个参数:

  • H:Hue(色调)。取值范围为:0~360,0(或360)表示红色,120表示绿色,240表示蓝色。但实际上它是一个圆环的形式,因此当取值小于 0 或大于 360 时,这个值仍然是有效的
  • S:Saturation(饱和度)。取值为:0%~100%。这个值决定了颜色的鲜艳程度,当它为 100% 时,会将当前色调完全展示出来,而随着百分比的降低,颜色的鲜艳程度会降低,表现出来的视觉效果就是颜色逐渐变灰
  • L:Lightness(亮度)。取值为:0%~100%。这个值和饱和度不同,并不是越高表现力越强。假定给它设定一个标准值为 50%,那么它在这个标准值时,表现出来的色调是最正的。当它高于或者低于标准值时,就会像照相一样,曝光过度导致相片泛白,或者曝光不足导致相片发黑

所以如果用 HSL 来表示红绿蓝三色,就是 red: hsl(0, 100%, 50%) green: hsl(120, 100%, 50%) blue: hsl(240, 100%, 50%)。当你需要随机产生一些比较鲜艳的颜色时,把 hue 单独作为变量是个不错的选择。

RGBA 一样,HSLA 也有一个 alpha 属性来调节透明度。

另外关于 HSLRGB 之间的转换,可以 参考页面

关于透明度

rgbhsl 有相应的 rgbahsla 来设置透明度,对于 颜色名称HEX 来说,就是使用 opacity,但是两者之间是有区别的。

opacity 是针对元素的透明度,p { opacity: .5 } 这样的设置会使元素整体透明,包括它的子元素。

alpha 是针对元素样式属性的透明度,p { background-color: rgba(0, 0, 0, .5) } 这样的设置只会使元素的背景色透明,并不会影响到其他属性(比如 color),也不会对子元素起效果。

其他

颜色对于前端来说其实是比较基础的东西,它的内容不多,但是不熟悉的话也会引起一些小麻烦。比如通过 element.style.color = '#f00' 将元素的字体设为红色,再想通过 #f00 来操作 DOM 是不能实现的,因为浏览器(非IE)会自动将 #f00 转换成 rgb(255, 0, 0) 之后再加入到元素的行间样式中 :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容

  • FreeCodeCamp - HTML5 and CSS 发现原来在另外一台电脑学 FreeCodeCamp 的时...
    付林恒阅读 9,325评论 2 17
  • 参考资料: w3cschool 《CSS揭秘》 【CSS进阶】CSS 颜色体系详解——Coco 请注意,如果你了解...
    HappyAdu阅读 1,003评论 0 1
  • CSS 通过使用十六进制代码设置特定的颜色预览模式 你是否知道在 CSS 中还有其他表示颜色的方法?其中的一种方法...
    followyounger1阅读 901评论 0 1
  • CSS的基本知识很简单,你只要知道有哪些基本样式属性、CSS的选择器,怎么在页面应用CSS,就可以随便倒腾试试手了...
    四光年阅读 1,476评论 4 23
  • 你娇艳如花 却似 放下的毒药 好奇的我总会忍不住品尝 他们说是毒 我也知 可依旧忍不住 因为 我有一个向死而生的理...
    伊苏灬卡尔阅读 181评论 0 1